【问题标题】:is it possible to use numpy.take to pick a list of indices?是否可以使用 numpy.take 来选择索引列表?
【发布时间】:2012-02-17 08:52:08
【问题描述】:

我想从 numpy.array 的元素中获取一些索引。这是我到目前为止所得到的:

import numpy as np

a = np.array(range(20))
a.shape=4,5
#~ [[ 0  1  2  3  4]
#~ [ 5  6  7  8  9]
#~ [10 11 12 13 14]
#~ [15 16 17 18 19]]

idxs = np.array([(4,0),(3,1),(2,1),(0,3)])
ret = a.take(idxs,1).diagonal().transpose()
print ret

#~ [[  4.   0.]
#~ [  8.   6.]
#~ [ 12.  11.]
#~ [ 15.  18.]]

是否有可能以更简单(或更快)的方式获得此结果?

【问题讨论】:

  • 您的idxs 仅适用于转置的a。没有a[4,0]
  • 我没有很好地解释自己,对不起。您看到的 (4,0) 表示从第一行获取元素 4 和元素 0。然后从第二行取元素3和1等。我显示的结果是正确的,我对方法不满意。
  • 也只是作为一般说明,要创建a,您应该使用类似a=np.arange(20).reshape((4,5))的东西

标签: python arrays numpy


【解决方案1】:

您可以为轴 0 索引创建一个数组:

a[np.arange(4)[:,None], idxs]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2019-11-05
    • 2010-10-22
    相关资源
    最近更新 更多