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

使用scipy.optimize.fmin优化变换矩阵时遇维度不匹配错误

问题解决:scipy.optimize.fmin优化变换矩阵时的维度不匹配错误

问题原因

scipy.optimize.fmin会自动将多维参数数组扁平化,你的4x4猜测矩阵会被转换成1x16的一维数组,直接用这个数组和inputArray做矩阵乘法时,就会出现维度不匹配的错误。

修正步骤

  1. 在目标函数内部,先将扁平化的guess重新reshape为4x4矩阵
  2. 用numpy向量化操作替代手动循环计算误差,提升效率

修正后的代码

import numpy as np
from scipy import optimize

rows, cols = 4, 4

guess = np.array([
    [1, -1, 2, 0], 
    [0,  2, 0, 0], 
    [1,  0, 0, 1], 
    [0,  1, 2, 0]
])

inputArray = np.array([
    [2, 4, 6, 9], 
    [2, 3, 1, 0], 
    [7, 2, 6, 4], 
    [1, 5, 2, 1]
])

goalArray = np.array([
    [14, 5, 17, 17], 
    [4,  6, 2,   0], 
    [3,  9, 8,  10], 
    [16, 7, 13,  8]
])

def objfunc(guess_flat, inputArray, goalArray):
    # 将扁平化的猜测值重新转为4x4矩阵
    guess = guess_flat.reshape((rows, cols))
    # 计算变换后的矩阵
    model = guess @ inputArray
    # 计算所有元素的绝对误差之和(等价于原代码的平方根和,平方开根号即绝对值)
    error = np.sum(np.abs(goalArray - model))
    return error

# 验证目标函数正确性
print(objfunc(guess.flatten(), inputArray, goalArray))  # 输出0.0
# 传入扁平化的初始猜测进行优化
minimum = optimize.fmin(objfunc, guess.flatten(), args=(inputArray, goalArray))

# 将优化结果转回4x4矩阵
optimized_matrix = minimum.reshape((rows, cols))
print("优化后的变换矩阵:")
print(optimized_matrix)
print("最小误差:", objfunc(minimum, inputArray, goalArray))

关键说明

  • 调用fmin时传入guess.flatten(),确保和函数内部的维度处理逻辑对应
  • 用numpy内置函数替代手动循环,代码更简洁且运行效率更高
  • 优化完成后,需将扁平化的结果reshape回4x4矩阵,得到最终的变换矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:52:31