You can use following simple function :
>>> def convertor(cut,array):
... return np.flipud(np.tri(4,4,3-cut)).__mul__(array)
在这个函数中,我创建了一个与您的矩阵具有相同维度的矩阵,使用了
np.tri 和
np.flipud 函数。但是,根据您想要的结果,它由 0 和 1 组成。例如,对于
cut = 2
,您将得到以下结果:
>>> np.flipud(np.tri(4,4,3-2))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 0.],
[ 1., 1., 0., 0.]])
现在,您需要将此矩阵与我们在函数内返回的矩阵相乘!
演示:
>>> m=array([[ 4., 4., 4., 4.],
... [ 4., 4., 4., 4.],
... [ 4., 4., 4., 4.],
... [ 4., 4., 4., 4.]])
>>> convertor(3,m)
array([[ 4., 4., 4., 4.],
[ 4., 4., 4., 0.],
[ 4., 4., 0., 0.],
[ 4., 0., 0., 0.]])
>>> convertor(0,m)
array([[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.]])
>>> convertor(1,m)
array([[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.],
[ 4., 4., 4., 4.],
[ 4., 4., 4., 0.]])
>>> convertor(5,m)
array([[ 4., 4., 0., 0.],
[ 4., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
triu
之前和之后调整矩阵以获得正确的结果。 - Mathias711