首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按列索引选择Numpy数组的每行中的一个元素

按列索引选择Numpy数组的每行中的一个元素
EN

Stack Overflow用户
提问于 2013-06-13 04:10:26
回答 3查看 19.8K关注 0票数 34

有没有更好的方法从"input_array“和"select_id”中获取"output_array“?

我们能摆脱range( input_array.shape[0] )吗?

代码语言:javascript
复制
>>> 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]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-13 15:38:31

您可以使用numpy.choose从给定的数组中进行选择,它从一个索引数组(在本例中为select_id)和一组数组(在本例中为input_array)中构造一个数组以供选择。但是,您可能首先需要转置input_array以匹配尺寸。下面是一个小示例:

代码语言:javascript
复制
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])
票数 34
EN

Stack Overflow用户

发布于 2013-06-13 21:32:56

我认为enumerate很方便。

代码语言:javascript
复制
[input_array[enum, item] for enum, item in enumerate(select_id)]
票数 2
EN

Stack Overflow用户

发布于 2013-06-13 21:06:56

这样如何:

代码语言:javascript
复制
[input_array[x,y] for x,y in zip(range(len(input_array[:,0])),select_id)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17074422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档