我需要一个矩阵的对角线条纹(不确定这里的术语,对角线矩阵条纹似乎最能描述它)。在
例如,我有一个大小为KxN的矩阵,其中K和N是任意大小,K>;N。例如,我有一个矩阵:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
我需要从中提取一条对角线条纹,在本例中,是一个矩阵MxV大小,它是通过截断原始条纹而创建的:
^{pr2}$所以结果矩阵是:
[[ 0 4 8]
[ 3 7 11]]
下面是一个使用矩阵掩蔽的小示例代码,用于去除屏蔽位置:
import numpy as np
X=np.arange(12).reshape(4,3)
mask=np.asarray([
[ True, False, False],
[ True, True, False],
[ False, True, True],
[ False, False, True]
])
>>> mask
array([[ True, False, False],
[ True, True, False],
[False, True, True],
[False, False, True]], dtype=bool)
>>> X
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> X.T[mask.T].reshape(3,2).T
array([[ 0, 4, 8],
[ 3, 7, 11]])
但我不明白这样的掩模是如何自动生成K和N尺寸的,比如39x9或360x96
感谢任何帮助。也许在numpy、scipy或pytorch中有一些函数可以自动执行这个操作?在
编辑:
我还有一个问题,有没有可能不得到:
^{pr2}$要获得这样的反向条纹:
[[ x x 2]
[ x 4 5]
[ 6 7 x]
[ 9 x x]]
扩展保罗的答案。您可以在PyTorch中多次使用diag执行相同的操作(我认为在PyTorch中没有任何直接的函数来执行跨步操作)
stride_tricks
完成以下操作:如果
^{pr2}$a
是一个数组,这将创建一个可写的视图,这意味着如果您有兴趣,可以执行以下操作更新:从左下到右上的条纹可以用同样的精神获得。唯一的小问题是:它与原始数组的地址不同。在
相关问题 更多 >
编程相关推荐