如何获取numpy数组相对于45度对角线的上/下部分?

f4t66c6m  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(139)

我试图弄清楚如何得到一个numpy矩阵的上三角形和下三角形相对于从左下到右上的45度对角线。换句话说,如果我的numpy数组是

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

我希望数组包含[1,2,3],[4,5],[7]在一个(有或没有对角线)和[6],[8,9]在另一个。
我知道np.triunp.tril沿着另一条对角线拆分数组(从左上角到右下角),但我似乎不知道如何沿着左下角到右上角进行拆分。
帮助将不胜感激!

hi3rlvi2

hi3rlvi21#

你可以使用np.fliplr来反转元素沿着左右轴的顺序,这将把反对角线变成对角线,然后使用通常的np.triunp.tril

7gcisfzg

7gcisfzg2#

我不知道是否有直接函数可以实现这一点,但你总是可以依靠列表切片。因此,根据元素是在数组的右边还是左边准备一个行和列的列表,然后将切片数组的值设置为0。数组的反义词可以通过减去第一个和拆分后的数组来取
最后是我的代码

import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a.copy()
r=[i for i in range(0,a.shape[0]) for j in range(0,a.shape[1]) if j>a.shape[1]-i-1 ]
c=[j for i in range(0,a.shape[0]) for j in range(0,a.shape[1]) if j>a.shape[1]-i-1 ]
a[r,c]=0
print('left',a)
a=b-a
print('right',a)

相关问题