我有像
这样的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索引直接管理吗?到目前为止,我所有的努力都失败了,但我并没有声称我可以完全绕过所有的索引机制。
答案 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])
>>>