假设我有这样一个东西:
(numpy数组)a=
[0 1 2 3],
[4 5 6 7],
[8 9 10 11]
如何获得 [1,1] 对应的反对角线 [2,5,8]?根据numpy,a.diagonal(0) = [0,5,10]
代表其对角线为零。这是可能的吗?我的原始问题是一个8x8(0:7)...希望这有所帮助。
假设我有这样一个东西:
(numpy数组)a=
[0 1 2 3],
[4 5 6 7],
[8 9 10 11]
如何获得 [1,1] 对应的反对角线 [2,5,8]?根据numpy,a.diagonal(0) = [0,5,10]
代表其对角线为零。这是可能的吗?我的原始问题是一个8x8(0:7)...希望这有所帮助。
每行获得一个新的反转数组。
>>> import numpy as np
>>> a = np.array([
... [0, 1, 2, 3],
... [4, 5, 6, 7],
... [8, 9, 10, 11]
... ])
>>> a[:, ::-1]
array([[ 3, 2, 1, 0],
[ 7, 6, 5, 4],
[11, 10, 9, 8]])
>>> a[:, ::-1].diagonal(1)
array([2, 5, 8])
或者使用numpy.fliplr
:
>>> np.fliplr(a).diagonal(1)
array([2, 5, 8])
a.shape
。 - wimmax(a.shape[1]-a.shape[0], 0)
代替1
。 - falsetrua[:, ::-1].diagonal(0)
或np.fliplr(a).diagonal(0)
。 - falsetru将数组翻转并使用相同的方法:
np.flipud(a).diagonal(0)[::-1]
np.rot90
。import numpy as np
a = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
my_diag = np.rot90(a).diagonal(-1)
结果:
>>> my_diag
array([2, 5, 8])
a = 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]])
>>> [(i, np.rot90(a).diagonal(2*i-a.shape[0]+1)) for i in range(a.shape[0])]
[(0, array([0])),
(1, array([ 2, 6, 10])),
(2, array([ 4, 8, 12, 16, 20])),
(3, array([14, 18, 22])),
(4, array([24]))]
def reverse_diag(arr, n):
idx = 2*n - arr.shape[0]+1
return np.rot90(arr).diagonal(idx)
使用a[:np.min(a.shape),:np.min(a.shape)]
可以将原始矩阵变成正方形。
编辑:OP表示数组是正方形... 最终答案如上所述。