2

numpy 配列を列ごとにスライスし、特定の行を除外するにはどうすればよいですか?

最初の列が「プレーヤー」に関するインデックスとして機能し、次の列がさまざまなゲームでのプレーヤーのスコアである numpy 配列があるとします。1 人のプレーヤーを除外して、ゲームのスコアを返すにはどうすればよいでしょうか。

例えば:

[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 に答える