您可以使用
np.tri生成一个矩阵,其中包含低于给定对角线且上面为零的矩阵.由于你想要将右下角归零,我们必须左右翻转:
bottom_right = lambda N, k: np.fliplr(np.tri(N, k=k-N)) == 1
例如,bottom_right(4,2)创建以下布尔矩阵:
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, True],
[False, False, True, True]], dtype=bool)
您可以将其用作切片以清除角落:
a = np.ones((4, 4))
a[bottom_right(4, 2)] = 0
现在是
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 0.],
[ 1., 1., 0., 0.]])
其他方式:
f = lambda a, k: np.fliplr(np.triu(np.fliplr(a), k=k-a.shape[0]+1))