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

基于Scipy的矩阵乘法与2D仿射映射正确实现问询

问题背景

有两组2D数据A和B,假设存在2×2矩阵M和2×1列向量c,满足:

$B = M*A + c + e$
其中e为高斯误差(均值0,方差$\sigma^2$)。目标是估计使B与预测值的平方距离和最小的M和c。

当前实现代码如下:

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt

A = np.array([
    [0, -6],
    [0, 6],
    [-6, 0],
    [6, 0],
    [-3, -3],
    [-3, 3],
    [0,0],
    [2, -2],
    [2, 4],
    [-3, 0],
    [-5, -3],
    [2, 5]
])

B = np.array([
    [0.45070423, 0.52288732],
    [0.125, 0.5625],
    [0.1754386, 0.15789474],
    [0.200489, 0.55012225],
    [0.30769231, 0.32451923],
    [0.1375, 0.45],
    [0.19935691, 0.46302251],
    [0.32142857, 0.53571429],
    [0.12765957, 0.53191489],
    [0.15246637, 0.30269058],
    [0.2247191, 0.20224719],
    [0.14379085, 0.55882353],
])

# MAPPING : getting M and c

def error_function(params):
    # Unpack M and c from the flat parameter array
    M = params[:4].reshape(2, 2)
    c = params[4:]
    
    predicted_B = (A @ M) + c

    # Calculate the sum of squared distances
    return np.sum(np.sum((predicted_B - B) ** 2, axis=1))

# Perform the optimization
initial_guess = np.zeros(6)
result = minimize(error_function, initial_guess)
M = result.x[:4].reshape(2, 2)
c = result.x[4:]

# Getting predictions
predicted_B = (A @ M) + c

print(predicted_B)
疑问解答

疑问1:矩阵乘法顺序的问题

  • 二者完全不一致,核心原因:

    1. 矩阵乘法不满足交换律,A@M和M@A的计算结果(维度合法时)完全不同;
    2. 直接执行M @ A会报错:代码中A是12×2矩阵,M是2×2矩阵,矩阵乘法要求左操作数列数等于右操作数行数,M@A的维度不匹配,无法计算。
  • 符合数学表达式的修改方法:
    数学表达式中,A的每个样本是2×1列向量,$M*A$是对每个列向量做矩阵乘法。对应到代码中A的行向量形式,可修改预测公式为:

predicted_B = (M @ A.T).T + c

或者保持原结构,调整M的转置:

M = params[:4].reshape(2, 2).T  # 对M做转置
predicted_B = (A @ M) + c

两种方式都能完全匹配数学表达式$B = M*A + c + e$的计算逻辑。

疑问2:高斯误差的处理

不需要额外处理,scipy.optimize.minimize通过最小化平方距离和,已经隐式处理了高斯误差:
当误差e是均值为0的高斯分布时,最小化平方距离和等价于最大化似然估计(MLE)。高斯分布的对数似然函数与$-\sum (B - \hat{B})2$成正比($\sigma2$是常数,不影响最小值的位置),因此最小化平方和的过程就是在求解高斯误差假设下的最优参数M和c。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:03:35