【发布时间】:2013-06-09 02:12:40
【问题描述】:
有没有更好的方法从“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]
【问题讨论】:
-
这是一种病态的做法,绝对不会比你拥有的更好,但
np.diagonal(input_array[:, select_id])也会让你得到array([ 3, 5, 50])。 -
除了使用
arange而不是range之外,问题中的高级索引解决方案已经是最好的选择了。