36

「input_array」と「select_id」から「output_array」を取得するより良い方法はありますか?

私たちは取り除くことができますrange( input_array.shape[0] )か?

>>> input_array = numpy.array( [ [3,14], [12, 5], [75, 50] ] )
>>> select_id = [0, 1, 1]
>>> print input_array
[[ 3 14]
 [12  5]
 [75 50]]

>>> output_array = input_array[  range( input_array.shape[0] ), select_id ]
>>> print output_array
[ 3  5 50]
4

4 に答える 4

35

numpy.chooseインデックス配列(あなたの場合select_id)から配列を構築し、配列のセット(あなたの場合)から選択することを使用して、指定された配列からinput_array選択できます。input_arrayただし、次元を一致させるために最初に転置する必要がある場合があります。以下に小さな例を示します。

In [101]: input_array
Out[101]: 
array([[ 3, 14],
       [12,  5],
       [75, 50]])

In [102]: input_array.shape
Out[102]: (3, 2)

In [103]: select_id
Out[103]: [0, 1, 1]

In [104]: output_array = np.choose(select_id, input_array.T)

In [105]: output_array
Out[105]: array([ 3,  5, 50])
于 2013-06-13T07:38:31.213 に答える
2

enumerateは便利だと思います。

[input_array[enum, item] for enum, item in enumerate(select_id)]
于 2013-06-13T13:32:55.570 に答える
0

どうですか:

[input_array[x,y] for x,y in zip(range(len(input_array[:,0])),select_id)]
于 2013-06-13T13:06:56.230 に答える