获取Numpy数组的反对角线

时间:2019-06-11 17:35:41

标签: python arrays numpy

我有一个Numpy数组,我想把它变成对角线...

>>> import numpy as np
>>> arr = np.eye(6, dtype=int)
>>> arr
... array([[1, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 0, 0, 1]])

我知道为了得到对角线,我可以这样做:

>>> arr.diagonal()
... array([1, 1, 1, 1, 1, 1])

但是我想得到它的对角线。

>>> flipped_arr = np.fliplr(arr)
>>> flipped_arr
... array([[0, 0, 0, 0, 0, 1],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [1, 0, 0, 0, 0, 0]])

当我尝试获得flipped_arr的对角线时,会发生以下情况:

>>> flipped_arr.diagonal()
... array([0, 0, 0, 0, 0, 0])

有什么办法可以解决这个问题?

4 个答案:

答案 0 :(得分:0)

所以您想获得对角线,您似乎已经有了解决方法

def anti_diagonal(arr):
    return np.fliplr(arr).diagonal()

所以对于像这样的矩阵

[[0, 0, 1],
 [0, 2, 0],
 [3, 0, 0]]

那么anti_diagonal将是

 [1, 2, 3]

答案 1 :(得分:0)

似乎您已经回答了自己的问题。

np.fliplr(arr).diagonal()

arr的对角线。

答案 2 :(得分:0)

您只需要零钱即可。

ops.pop()

您的反对角线就像..

 import numpy as np
 arr = np.eye(6, dtype=int)
 arr
 array([[1, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 0, 0, 1]])
 arr.diagonal()
 array([1, 1, 1, 1, 1, 1])

现在,您需要打印对角线flipped_arr。

这是获取对角线的代码。

 flipped_arr = np.fliplr(arr)
 flipped_arr
 array([[0, 0, 0, 0, 0, 1],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [1, 0, 0, 0, 0, 0]])

希望这个人有用!

答案 3 :(得分:0)

numpy.diagonal返回numpy的某些版本的副本而不是视图,并且也可以是只读的。您可以通过切片来构建反对角线的视图:

>>> import numpy as np

>>> a = np.arange(9).reshape(3, 3)
>>> print(a)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

>>> x = a.ravel()[2:-1:2]
>>> print(x)
[2 4 6]

# modify 'x' and 'a' changes since x is a view
>>> x += 10
>>> print(a)
[[ 0  1 12]
 [ 3 14  5]
 [16  7  8]]