如何访问索引满足某些条件的numpy数组的所有元素?

时间:2014-02-05 13:57:37

标签: python numpy scipy

例如,我想在其对角线上设置矩阵的所有元素(i + j

我考虑过生成一个掩码,但这会导致在掩码矩阵中访问这些元素的问题。

什么是最好的解决方案?

1 个答案:

答案 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]])