Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何有效地从numpy数组中提取由其索引给出的元素列表?_Python_Numpy_Optimization - Fatal编程技术网

Python 如何有效地从numpy数组中提取由其索引给出的元素列表?

Python 如何有效地从numpy数组中提取由其索引给出的元素列表?,python,numpy,optimization,Python,Numpy,Optimization,我有一个多维numpy数组,我想用它的一些元素来构造一个一维数组。我需要采用的元素由其索引给出,例如: inds = [(0,0), (0,1), (1,1), (1,0), (0,2)] 我用一种简单的方式解决它: ls = [] for i, j in inds: ls += [a[i,j]] 它给出了期望的结果。然而,我意识到这个解决方案对我来说太慢了。是否有可能以更有效的方式进行同样的操作?numpy数组可以使用序列(以及更一般的numpy数组)进行索引 例如,这里是我的数

我有一个多维numpy数组,我想用它的一些元素来构造一个一维数组。我需要采用的元素由其索引给出,例如:

inds = [(0,0), (0,1), (1,1), (1,0), (0,2)] 
我用一种简单的方式解决它:

ls = [] 
for i, j in inds:
   ls += [a[i,j]]

它给出了期望的结果。然而,我意识到这个解决方案对我来说太慢了。是否有可能以更有效的方式进行同样的操作?

numpy数组可以使用序列(以及更一般的numpy数组)进行索引

例如,这里是我的数组
a

In [19]: a
Out[19]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
i
j
保存
inds
数组的第一和第二坐标序列:

In [20]: i
Out[20]: [0, 0, 1, 1, 0]

In [21]: j
Out[21]: [0, 1, 1, 0, 2]
您可以使用这些从
a
中提取相应的值:

In [22]: a[i, j]
Out[22]: array([0, 1, 6, 5, 2])
如果代码中已有
inds
,则可以使用
zip
将元组列表分为
i
j

In [23]: inds
Out[23]: [(0, 0), (0, 1), (1, 1), (1, 0), (0, 2)]

In [24]: i, j = zip(*inds)

In [25]: i
Out[25]: (0, 0, 1, 1, 0)

In [26]: j
Out[26]: (0, 1, 1, 0, 2)
或者,如果
inds
是具有形状(n,2)的数组,如下所示:

In [27]: inds = np.array(inds)

In [28]: inds
Out[28]: 
array([[0, 0],
       [0, 1],
       [1, 1],
       [1, 0],
       [0, 2]])
您只需将
inds
的转置分配给
i,j

In [33]: i, j = inds.T

In [34]: i
Out[34]: array([0, 0, 1, 1, 0])

In [35]: j
Out[35]: array([0, 1, 1, 0, 2])

In [36]: a[i, j]
Out[36]: array([0, 1, 6, 5, 2])