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

如何用Python、NumPy计算n维函数F(x)=sum(x²)的梯度?

计算n维函数F(x)=sum(x²)的梯度

数学原理

函数F(x) = Σ(xᵢ²)(i从1到n),对每个分量xᵢ求偏导可得:∂F/∂xᵢ = 2xᵢ。因此梯度向量∇F(x)是一个n维向量,每个元素对应原向量x对应元素的2倍,即∇F(x) = 2x。

代码实现

方法1:纯Python手动遍历

适合理解底层逻辑,逐个计算梯度分量:

def compute_gradient(x):
    # x为列表/元组形式的n维向量
    gradient = []
    for xi in x:
        gradient.append(2 * xi)
    return gradient

# 示例
x = [1, 2, 3, 4]
print(compute_gradient(x))  # 输出: [2, 4, 6, 8]

方法2:用NumPy高效计算

处理高维向量时更简洁高效,利用向量广播运算:

import numpy as np

def compute_gradient_np(x):
    # x为NumPy数组形式的n维向量
    return 2 * x

# 示例
x = np.array([1, 2, 3, 4])
print(compute_gradient_np(x))  # 输出: [2 4 6 8]

验证梯度正确性

可以通过数值梯度近似验证解析梯度的准确性,数值梯度用(F(x+εeᵢ) - F(x-εeᵢ))/(2ε)近似偏导(ε取极小值,比如1e-5):

def numerical_gradient(x, epsilon=1e-5):
    n = len(x)
    grad = np.zeros(n)
    for i in range(n):
        x_plus = x.copy()
        x_plus[i] += epsilon
        f_plus = np.sum(x_plus ** 2)
        
        x_minus = x.copy()
        x_minus[i] -= epsilon
        f_minus = np.sum(x_minus ** 2)
        
        grad[i] = (f_plus - f_minus) / (2 * epsilon)
    return grad

# 对比解析梯度与数值梯度
x = np.array([1.5, 2.2, 3.7])
analytic_grad = compute_gradient_np(x)
numeric_grad = numerical_gradient(x)
print("解析梯度:", analytic_grad)
print("数值梯度:", numeric_grad)
# 输出几乎一致,误差在ε量级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:50:26