Python:如何在某些索引位置获取数组的值?

MoT*_*GGE 15 python arrays indexing numpy

我有一个像这样的numpy数组:

a = [0,88,26,3,48,85,65,16,97,83,91]
Run Code Online (Sandbox Code Playgroud)

如何在一步中获得某些指数位置的值?例如:

ind_pos = [1,5,7]
Run Code Online (Sandbox Code Playgroud)

结果应该是:

[88,85,16]
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 18

只是用你索引 ind_pos

ind_pos = [1,5,7]
print (a[ind_pos]) 
[88 85 16]


In [55]: a = [0,88,26,3,48,85,65,16,97,83,91]

In [56]: import numpy as np

In [57]: arr = np.array(a)

In [58]: ind_pos = [1,5,7]

In [59]: arr[ind_pos]
Out[59]: array([88, 85, 16])
Run Code Online (Sandbox Code Playgroud)

  • 啊它必须是一个numpy数组.如果我这样尝试,它就行不通:a = [0,88,26,3,48,85,65,16,97,83,91] ind_pos = [1,5,7] a [ind_pos ]回溯(最近一次调用最后一次):文件"<ipython-input-121-92d3ce287d9d>",第1行,在<module> a [ind_pos] TypeError:list indices必须是整数,而不是list但是如果我添加行" arr = np.array(a)",它有效.谢谢! (2认同)

Oha*_*hen 10

一个班轮"没有进口"版本

a = [0,88,26,3,48,85,65,16,97,83,91]
ind_pos = [1,5,7]
[ a[i] for i in ind_pos ]
Run Code Online (Sandbox Code Playgroud)


che*_*ner 6

尽管您询问numpy数组,但您可以通过使用operator.itemgetter.

>>> from operator import itemgetter
>>> a = [0,88,26,3,48,85,65,16,97,83,91]
>>> ind_pos = [1, 5, 7]
>>> print itemgetter(*ind_pos)(a)
(88, 85, 16)
Run Code Online (Sandbox Code Playgroud)

  • 确实应该有一种方法可以做到这一点,而无需调用包 (2认同)

Ffi*_*ydd 5

您可以使用索引数组,只需将其ind_pos作为索引参数传递,如下所示:

a = np.array([0,88,26,3,48,85,65,16,97,83,91])
ind_pos = np.array([1,5,7])

print(a[ind_pos])
# [88,85,16]
Run Code Online (Sandbox Code Playgroud)

索引数组不一定是 numpy 数组,它们也可以是列表或任何类似序列的对象(尽管不是元组)。