我有一个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])
有什么办法可以解决这个问题?
答案 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]]