如何对numpy矩阵rmat的对角线元素执行1转0、0转1的翻转操作
Numpy矩阵主对角线二值元素翻转实现方案
你的需求可以通过numpy内置的索引操作实现,0和1互转的逻辑可以直接用二值异或或者算术取反实现,无需额外条件判断。
基础实现(直接修改原矩阵)
在你给出的代码基础上补充后如下:
import numpy as np # 原矩阵生成代码 mat = np.random.binomial(1, .5, 4) rmat = np.array([mat, ]*4) # 翻转主对角线元素 rmat[np.diag_indices_from(rmat)] ^= 1
如果你对异或运算不熟悉,也可以用更直观的算术写法实现完全相同的效果:
rmat[np.diag_indices_from(rmat)] = 1 - rmat[np.diag_indices_from(rmat)]
可选实现(保留原矩阵,生成新矩阵)
如果需要保留原始rmat不变,可以用如下写法生成新的结果矩阵:
new_rmat = rmat.copy() # 提取对角线元素取反后回填 np.fill_diagonal(new_rmat, new_rmat.diagonal() ^ 1)
效果示例
假设生成的原rmat为:
[[1 0 1 0] [1 0 1 0] [1 0 1 0] [1 0 1 0]]
执行翻转操作后结果为:
[[0 0 1 0] [1 1 1 0] [1 0 0 0] [1 0 1 1]]
可以看到主对角线的1、0、1、0已经被翻转成0、1、0、1,完全符合要求。
内容的提问来源于stack exchange,提问作者Expectation mean first moment
相关产品推荐
相关产品推荐

