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

如何修改numpy数组的元素值?赋值后无变化是什么原因

问题原因与解决方案

核心原因

你遇到的现象并非numpy拒绝接收赋值,而是两个基础特性共同作用的结果:

  • numpy数组直接通过=赋值属于引用绑定,不会生成新的数组副本。你代码中的x_bip = x、x_bop = x实际上让三个变量x、x_bip、x_bop指向内存中完全相同的数组对象,修改任意一个变量的元素值,其余两个都会同步变更。
  • 操作顺序导致增量完全抵消:你先执行x_bip[i] = x_bip[i] + delta,此时三个变量共有的数组第i位已经加了delta;紧接着执行x_bop[i] = x_bop[i] - delta,相当于给刚加过delta的同一位置又减了delta,最终数组回到初始值,所以打印结果看不到任何变化。

修复方法

只需要在绑定变量时显式创建数组副本即可,使用numpy内置的.copy()方法:

def numerical_partial_derivative(f, x, i, dx = delta):
    print("delta:", delta)
    print("x type:", type(x))
    # 显式创建独立副本
    x_bip = x.copy()
    x_bop = x.copy()
    x_bip[i] = x_bip[i] + delta
    x_bop[i] = x_bop[i] - delta

    print("x, x_bip, x_bop:", x, x_bip, x_bop)

    return ((f(x_bip) - f(x_bop)) / (2 * dx))

修改后x_bip、x_bop和原始的x是完全独立的数组对象,修改不会互相影响,增量也不会出现抵消的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:02