Python:如何在某些索引位置获取数组的值?
Posted
技术标签:
【中文标题】Python:如何在某些索引位置获取数组的值?【英文标题】:Python: How to get values of an array at certain index positions? 【发布时间】:2014-10-01 19:29:02 【问题描述】:我有一个这样的 numpy 数组:
a = [0,88,26,3,48,85,65,16,97,83,91]
如何在一步中获取特定索引位置的值?例如:
ind_pos = [1,5,7]
结果应该是:
[88,85,16]
【问题讨论】:
a 不是问题中的 numpy 数组,而是一个简单的列表 【参考方案1】:只需使用你的索引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])
【讨论】:
啊,它必须是一个 numpy 数组。如果我这样尝试,它不起作用:a = [0,88,26,3,48,85,65,16,97,83,91] ind_pos = [1,5,7] a[ind_pos ] Traceback(最近一次调用最后一次):文件“a
是一个 numpy 数组。是的,a 需要是一个 numpy 数组【参考方案2】:
一个班轮“无进口”版本
a = [0,88,26,3,48,85,65,16,97,83,91]
ind_pos = [1,5,7]
[ a[i] for i in ind_pos ]
【讨论】:
【参考方案3】:尽管您询问了 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 更快? 视情况而定。如果你已经有一个 NumPy 数组,那应该会更快。如果您必须首先从列表中构造一个 NumPy 数组,那么执行此操作和选择所需的时间可能比简单地在列表上操作要慢。 确实应该有一种方法可以做到这一点而无需调用包【参考方案4】:您可以使用index arrays,只需将您的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 数组,它们也可以是列表或任何类似序列的对象(尽管不是元组)。
【讨论】:
【参考方案5】:你的代码是
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]
【讨论】:
以上是关于Python:如何在某些索引位置获取数组的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何拆分用户输入以使其占用数组中的两个索引位置? (Python)