2

如何按列对 numpy 数组进行切片,并排除特定行?

想象一下,您有一个 numpy 数组,其中第一列用作“玩家”的索引,接下来的列是玩家在不同游戏中的得分。如何在排除一名玩家的情况下返回游戏的分数。

例如:

[0  0  0  0
 1  2  1  1 
 2 -6  0  2
 3  4  1  3]

如果您想返回第一个分数(第 1 列),您可以:

>>score[:,1]
[0,2,-6,4]

但是你怎么能排除一个玩家/行呢?如果该玩家/第 3 行,您如何获得:

[0,2,-6]

或者,如果该玩家/第 1 行,您如何获得:

[0,-6, 4]
4

2 回答 2

6

您可以将要作为列表包含的玩家传递给第一个索引,score如下所示:

>>> import numpy as np
>>> score = np.array([
... [0,0,0,0],
... [1,2,1,1],
... [2,-6,0,2],
... [3,4,1,3]
... ])
>>> players_to_include = [0,2,3]
>>> score[players_to_include, 1]
array([ 0, -6,  4])

这将只获得玩家 [0,2,3] 的分数。

概括地说,你可以这样做:

>>> players = list(xrange(np.size(score, 0)))
>>> players
[0, 1, 2, 3]
>>> excludes = [2,3]
>>> players_to_include = [p for p in players if p not in excludes]
>>> players_to_include
[0, 1]
>>> score[players_to_include, 1]
array([0, 2])
于 2012-09-01T17:22:19.537 回答
4

您可以将请求行的范围作为列表输入,例如:

score[ range(2) + [4], 1]

对于更一般的谓词函数 p(x) = 1 如果 x 是一个好行,您可以这样做:

score [ [x for x in range(score.shape[0]) if p(x)], 1]
于 2012-09-01T16:58:21.697 回答