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

如何在Python中高效为数组对角线元素添加标量值?

高效给NumPy矩阵对角线元素加标量的方法

嘿,这个问题问到点子上了——处理大规模矩阵时,避免不必要的数组复制、用原地操作是提升效率的关键。针对你的需求,这里有两种方法,重点推荐第一种最高效的:

方法一:原地修改对角线(最优解)

利用np.diag_indices获取对角线的索引,直接原地给这些位置的元素加标量。这种方式不会创建任何数组副本,完全在原始数组的内存上操作,对超大矩阵友好度拉满。

import numpy as np

# 你的原始数组
arr = np.array([[ 0.57733218, 0.09794384, 0.44497735],
                [ 0.87061284, 0.10253493, 0.56643557],
                [ 0.76358739, 0.44902046, 0.86064797]])

# 获取矩阵对角线的索引(假设是方阵,若不是方阵可调整维度参数)
diag_indices = np.diag_indices(arr.shape[0])

# 原地给对角线元素加20
arr[diag_indices] += 20

print(arr)

输出结果正是你想要的:

array([[20.57733218,  0.09794384,  0.44497735],
       [ 0.87061284, 20.10253493,  0.56643557],
       [ 0.76358739,  0.44902046, 20.86064797]])

方法二:简洁但稍逊一筹的写法

如果你喜欢更简洁的代码,可以用np.fill_diagonal结合np.diag,但这种方式会先取出对角线元素创建副本,修改后再填充回去,内存开销比第一种略大,适合小矩阵但不推荐给超大矩阵用:

np.fill_diagonal(arr, np.diag(arr) + 20)

为什么方法一更高效?

当处理非常大的矩阵时,数组复制会占用额外内存,甚至可能触发内存不足的问题。方法一的原地操作直接修改原始数组的内存区域,没有任何复制开销,速度和内存利用率都是最优的。

内容的提问来源于stack exchange,提问作者user121

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:30