有没有更好的方法从"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]
发布于 2013-06-13 15:38:31
您可以使用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-13 21:32:56
我认为enumerate很方便。
[input_array[enum, item] for enum, item in enumerate(select_id)]
发布于 2013-06-13 21:06:56
这样如何:
[input_array[x,y] for x,y in zip(range(len(input_array[:,0])),select_id)]
https://stackoverflow.com/questions/17074422
复制相似问题