访问布尔numpy矩阵的所有非对角线元素

时间:2014-08-04 07:29:32

标签: python numpy matrix

假设存在对角矩阵M:

#import numpy as np

M = np.matrix(np.eye(5, dtype=bool))

有没有人知道访问所有非对角线元素的简单方法,这意味着所有元素都是False?在R我可以通过执行

来执行此操作
M[!M]

不幸的是,这在Python中无效。

2 个答案:

答案 0 :(得分:8)

您需要按位运算符:

M[~M]

答案 1 :(得分:3)

您可以尝试将np.extract与np.eye结合使用。例如:

M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.extract(1 -  np.eye(3), M)
# result: array([2, 3, 4, 6, 7, 8])

在你的例子中,它几乎是一个身份:

M = np.matrix(np.eye(5, dtype=bool))
np.extract(1 - np.eye(5), M)
#result: 
array([False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False], dtype=bool)