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

scipy.optimize.minimize形状不匹配求助:(2,)与(2,5)无法广播

解决scipy.optimize.minimize中的形状不匹配问题

错误根源

报错ValueError: operands could not be broadcast together with shapes (2,) (2,5)的原因是矩阵运算维度不匹配:

  • X是(2,5)的矩阵,w是(5,)的向量,使用@(矩阵乘法)得到的结果是(2,)的向量;
  • 而y是(2,5)的矩阵,(2,)和(2,5)的形状无法直接进行减法运算,导致广播失败。

解决方案

根据你设置的初始参数(10,10,10,10,10,)(5维向量),推测你需要给每个特征分配一个权重,通过逐元素乘法让运算结果和y形状匹配。修改代码如下:

import numpy as np
from scipy.spatial import distance_matrix
from scipy.optimize import minimize

# Create the matrices
X = np.array([[1,2,3,4,5],[2,1,0,3,4]])
y = np.array([[0,0,0,0,1],[1,1,1,1,0]])

# Display the matrices
print("matrix x:\n", X)
print("matrix y:\n", y)

# compute the distance matrix
dist_mat = distance_matrix(X, y, p=2)

# display distance matrix
print("Distance Matrix:\n", dist_mat)

loss_res = lambda z: 0.5 * z ** 2 * (np.abs(z) <= 1) + (np.abs(z) - 0.5) * (np.abs(z) > 1)
# 核心修改:将矩阵乘法@改为逐元素乘法*,实现维度广播
f_to_optMin = lambda w: np.sum(loss_res(X * w.ravel() - y))

res= minimize(f_to_optMin, (10,10,10,10,10,))
print(res.x)

修改说明

  • X * w.ravel()中,(5,)的w会被numpy自动广播为(2,5)的形状,和X逐元素相乘后得到(2,5)的矩阵,与y形状一致,可正常执行减法运算。
  • 如果你的实际需求是矩阵乘法(比如X乘w得到(2,5)的结果),则需要将w的维度调整为(5,5),同时修改初始参数和目标函数:
    # 目标函数调整为矩阵乘法
    f_to_optMin = lambda w: np.sum(loss_res(X @ w.reshape(5,5) - y))
    # 传入扁平化的5x5初始参数
    res= minimize(f_to_optMin, np.ones((5,5)).ravel())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:43:15