跨阵列的列应用变量索引

时间:2017-09-15 18:46:41

标签: python arrays numpy indexing multiple-columns

我有一个2x3数组,如下所示:

import numpy as np    
y = np.array([[1,2,3], [4,5,6]])

我想索引每列中的一个元素。例如,第1列中的第1个元素,第2列中的第2个元素和第3列中的第1个元素。输出应如下所示:

ans = [1,5,3]

我尝试使用

y[0,1,0]

np.take(y, [0,1,0,1], axis=1)

但都没有奏效。你能帮忙吗?

2 个答案:

答案 0 :(得分:0)

你应该这样访问它:

>>> y
array([[1, 2, 3],
       [4, 5, 6]])
>>> y[0,0]
1
>>> y[1,1]
5
>>> y[0,2]
3
>>> [y[0,0], y[1,1],y[0,2]]
[1, 5, 3]

numpy数组是数组中坐标[x,y]的引用。 然后你可以找到一些解决特定问题的策略,具体的逻辑:

>>> y
array([[1, 2, 3],
       [4, 5, 6]])
>>> res=[y[j%2,j] for j in range(y.shape[1])]
>>> res
[1, 5, 3]
>>> y = np.array([[1,1,1,1,1,1,1,1],[4,5,6,7,8,9,10,11]])
>>> res=[y[j%2,j] for j in range(y.shape[1])]
>>> res
[1, 5, 1, 7, 1, 9, 1, 11]

编辑:

>>> idxCol=[0,1,0]
>>> res=[y[idxCol[i],i] for i in range(len(idxCol))]
>>> res
[1, 5, 3]

答案 1 :(得分:0)

In [448]: y = np.array([[1,2,3], [4,5,6]])
In [450]: idx = [0,1,0]

idx选择连续列的行,因此您需要将其与列索引列表(或数组)配对:

In [454]: y[idx,[0,1,2]]
Out[454]: array([1, 5, 3])
In [455]: y[idx, np.arange(y.shape[1])]
Out[455]: array([1, 5, 3])

通过采用2个列表的“转置”可能有助于将其可视化:

In [456]: list(zip([0,1,0],[0,1,2]))
Out[456]: [(0, 0), (1, 1), (0, 2)]
In [457]: [y[i,j] for i,j in Out[456]]
Out[457]: [1, 5, 3]

您必须以这种方式使用列表,但numpy会为您配对。