我有一个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)
但都没有奏效。你能帮忙吗?
答案 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
会为您配对。