You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:41