例如,我想在其对角线上设置矩阵的所有元素(i + j 我考虑过生成一个掩码,但这会导致在掩码矩阵中访问这些元素的问题。 什么是最好的解决方案?
答案 0 :(得分:4)
由于您的矩阵似乎是方形的,您可以使用布尔掩码并执行:
n = mat.shape[0]
idx = np.arange(n)
mask = idx[:, None] + idx < n - 1
mat[mask] = 0
要了解发生了什么:
>>> mat = np.arange(16).reshape(4, 4)
>>> n = 4
>>> idx = np.arange(n)
>>> idx[:, None] + idx
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]])
>>> idx[:, None] + idx < n - 1
array([[ True, True, True, False],
[ True, True, False, False],
[ True, False, False, False],
[False, False, False, False]], dtype=bool)
>>> mat[idx[:, None] + idx < n -1] = 0
>>> mat
array([[ 0, 0, 0, 3],
[ 0, 0, 6, 7],
[ 0, 9, 10, 11],
[12, 13, 14, 15]])