如何将NumPy数组的所有非对角线元素替换为指定值?
解决方案
这里有几种直接可行的方法来实现你的需求:
方法1:直接生成目标数组(最简洁)
不用先创建identity数组再修改,直接用np.where结合单位矩阵的布尔掩码生成结果:
import numpy as np arr = np.where(np.eye(13, dtype=bool), 1, 0.45)
np.eye(13, dtype=bool)会生成一个13x13的布尔矩阵,对角线为True,其余为False。np.where会根据这个掩码,将True位置设为1,False位置设为0.45。
方法2:修改已有的identity数组
如果你已经有了identity数组,也可以直接通过布尔索引替换非对角线元素:
import numpy as np arr = np.identity(13) # 生成非对角线的布尔掩码 mask = ~np.eye(arr.shape[0], dtype=bool) arr[mask] = 0.45
这里的~是取反操作,把对角线的True变成False,非对角线的False变成True,然后用这个掩码选中所有非对角线元素赋值为0.45。
方法3:先创建全值数组再设置对角线
先创建一个所有元素都是0.45的数组,再把对角线元素设为1:
import numpy as np arr = np.full((13, 13), 0.45) np.fill_diagonal(arr, 1)
np.full用来生成指定形状和填充值的数组,np.fill_diagonal可以快速给数组的对角线赋值。
这几种方法都能高效完成需求,其中方法1和方法3不需要先创建identity数组,步骤更简洁。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

