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

如何用PyTorch求解固定矩阵C时A=BC矩阵分解中的B矩阵?

用PyTorch求解矩阵分解中的B矩阵

问题分析

已知多个矩阵样本 (A_1, A_2, A_3, \dots) 和固定矩阵 (C),满足 (A_i = B_i C),需要求解每个对应的 (B_i)。这本质是求解线性方程组的最优解:当 (C) 列满秩时存在唯一精确解,非列满秩时可求最小二乘意义下的最优解。

核心解法

利用Moore-Penrose伪逆求解是最直接的方式:对每个 (A_i),(B_i = A_i \times C^+),其中 (C^+) 是 (C) 的伪逆。PyTorch内置的torch.pinverse()方法会自动处理列满秩/非满秩场景,输出最小二乘最优解。

代码实现示例

import torch

# 定义已知的固定矩阵C(示例:3×2矩阵)
C = torch.tensor([[1.0, 2.0],
                  [3.0, 4.0],
                  [5.0, 6.0]])

# 定义多个已知的A矩阵样本(示例:两个2×2矩阵)
A1 = torch.tensor([[7.0, 8.0],
                   [9.0, 10.0]])
A2 = torch.tensor([[11.0, 12.0],
                   [13.0, 14.0]])

# 计算C的伪逆
C_pinv = torch.pinverse(C)

# 求解每个B矩阵
B1 = A1 @ C_pinv
B2 = A2 @ C_pinv

# 验证结果:对比B_i@C与原A_i的误差
print("B1@C与A1的误差:", torch.norm(B1 @ C - A1))
print("B2@C与A2的误差:", torch.norm(B2 @ C - A2))

关键说明

  • 若 (C) 是可逆方阵,伪逆等价于普通逆矩阵,此时解是精确的;
  • 若 (C) 列数大于行数(列不满秩),伪逆会给出最小化Frobenius范数 (|A_i - B_i C|_F^2) 的最优解;
  • 批量处理可提升效率:将多个A矩阵堆叠成张量,一次性计算所有B矩阵:
    # 批量处理示例:堆叠A1、A2为(2,2,2)的张量
    A_batch = torch.stack([A1, A2])
    B_batch = A_batch @ C_pinv
    print(B_batch.shape)  # 输出: torch.Size([2, 2, 3])
    

内容的提问来源于stack exchange,提问作者Manh Nguyen Tien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:32:49