【问题标题】:Python: How to get values of an array at certain index positions?Python:如何在某些索引位置获取数组的值?
【发布时间】: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 数组,而是一个简单的列表

标签: python arrays numpy indexing


【解决方案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(最近一次调用最后一次):文件“”,第 1 行,在 a[ind_pos] 类型错误:列表索引必须是整数,而不是列表但如果我添加行“ arr = np.array(a)",它有效。谢谢!
  • 啊,好吧,我假设 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]

      【讨论】:

        猜你喜欢
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2021-07-08
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多