Numpy索引以获得第二个暗淡的值,具体取决于第一个暗淡

时间:2018-05-01 10:20:40

标签: python numpy

我有像

这样的2d numpy数组
a = np.array([ [1,2,3], [2,3,4], [3,4,5], [4,5,6] ])

[[1 2 3]
 [2 3 4]
 [3 4 5]
 [4 5 6]]

使用a[:,-1]我得到一个列表,其中包含第二个暗淡的最后一个值:[3 4 5 6]

但是现在,我怎样才能更灵活,并根据第一个暗淡获得第二个暗淡的值。例如,我想要第一行的最后一个值,第二行的中间值以及第三行和第四行的第一个值,因此结果为[3 3 3 4]

我可以使用numpy索引直接管理吗?到目前为止,我所有的努力都失败了,但我并没有声称我可以完全绕过所有的索引机制。

2 个答案:

答案 0 :(得分:1)

您可以使用列表并将它们传递给切片运算符,如下所示:

a[[0,1,2,3],[2,1,0,0]]
> array([3, 3, 3, 4])

您唯一需要记住的是两个列表必须具有相同的长度。然后,解释器将两个列表的元素配对并提取相应的元素。

答案 1 :(得分:0)

首先,我“镜像”了数组,然后我采用了对角线并与对角线最后一个元素下面的内容连接起来。这是你需要的吗?

如果您想进一步定制,请查看对角线上的文档,您可以在第一轴上的任何元素处开始对角线。

>>> a
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6],
       [5, 6, 7]])
>>> b = np.fliplr(a)
>>> np.concatenate((b.diagonal(), b[b.shape[1]:][:, -1]))
array([3, 3, 3, 4, 5])
>>>