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

29

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

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

如何在一步内获取某些索引位置上的值?例如:

ind_pos = [1,5,7]

结果应该是:

[88,85,16]

1
a不是一个numpy数组,而是一个简单的列表。 - bugmenot123
5个回答

33

只需使用您的 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])

3
啊,它必须是一个numpy数组。如果我像这样尝试,它就不起作用: a = [0,88,26,3,48,85,65,16,97,83,91] ind_pos = [1,5,7] a[ind_pos] Traceback (most recent call last): File "<ipython-input-121-92d3ce287d9d>", line 1, in <module> a[ind_pos] TypeError: list indices must be integers, not list但如果我添加一行“arr = np.array(a)”,它就可以工作了。谢谢! - MoTSCHIGGE
啊,好的,我假设a是一个numpy数组。是的,a需要是一个numpy数组。 - Padraic Cunningham

23

一行代码"无导入"版本

a = [0,88,26,3,48,85,65,16,97,83,91]
ind_pos = [1,5,7]
[ a[i] for i in ind_pos ]

7
虽然您询问的是 numpy 数组,但您可以通过使用 operator.itemgetter 来获得常规 Python 列表的相同行为。
>>> 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)

这个问题是NumPy还是Python更快? - Fabian Bosler
1
这要看情况。如果你已经有了一个NumPy数组,那应该会更快。但如果你需要先从列表中构建一个NumPy数组,那么构建和选择所需的时间可能比直接操作列表要慢。 - chepner
1
真的应该有一种方法可以在不调用包的情况下完成这个。 - Joey

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

您可以使用索引数组,只需将您的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]

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


-3

你的代码如下:

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

ind_pos = [a[1],a[5],a[7]]

print(ind_pos)

输出结果为 [88, 85, 16]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接