因此,在numpy数组中,有一个内置的函数用于获取对角线索引,但我似乎无法弄清楚如何从右上角而不是左上角开始获取对角线。
这是从左上角开始的正常代码:
>>> import numpy as np
>>> array = np.arange(25).reshape(5,5)
>>> diagonal = np.diag_indices(5)
>>> array
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> array[diagonal]
array([ 0, 6, 12, 18, 24])
如果我想让它返回,我应该使用什么:
array([ 4, 8, 12, 16, 20])
3条答案
按热度按时间kiayqfof1#
有
或
其中,
np.diag(np.fliplr(array))
更快:km0tfn4u2#
下面是使用
numpy
切片的简单方法。我个人觉得这对眼睛来说并不太难,但同意fliplr
更有描述性。为了突出这个例子对现有答案的贡献,我运行了相同的简单基准测试:
与最快替代方案的奇偶校验比较:
基准测试
初步比较表明,我的解决方案在复杂性上是线性的,而使用第二个“步骤”解决方案则不是:
我通常使用这种方法来翻转图像(镜像它们),或者在
opencv
的格式 (通道,高度,宽度) 和matplotlib
的格式 (高度,宽度,通道) 之间进行转换。所以对于一个三维图像,它就是flipped = image[:, :, ::-1]
。当然,您可以通过将::-1
部分放置在所需的维度中,将其概括为沿着任何维度翻转。ccrfmcuu3#
这里有两个想法: