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

如何通过给定形状的SVD分量重构原始三维矩阵?

三维数组SVD重构方法

原理说明

numpy.linalg.svd 对维度≥3的数组处理逻辑为:仅对最后两个维度执行二维SVD分解,前面的所有维度作为批量维度处理。
你输入的原始矩阵形状为(256, 256, 2),等价于批量处理256个形状为(256, 2)的二维矩阵,所以得到的分量形状完全符合full_matrices=True模式下的SVD输出规则:

  • 批量维度为256,对应所有分量的第0维长度为256
  • 每个二维(256, 2)矩阵分解得到的U为(256, 256)、奇异值s长度为2、vh为(2, 2),合并批量维度后就是你拿到的分量形状。

重构步骤

重构逻辑和二维SVD一致,仅需通过批量矩阵乘法完成所有切片的并行计算即可,不需要额外调整维度逻辑:

  1. 先将每个一维奇异值转换为对应的二维对角矩阵,适配矩阵乘法要求
  2. 用批量矩阵乘法完成U @ 奇异值对角矩阵 @ vh的计算

示例代码

import numpy as np

# 将形状为(256, 2)的奇异值向量转换为形状(256, 2, 2)的对角矩阵数组
s_diag = np.apply_along_axis(np.diag, axis=1, arr=s)

# 批量矩阵乘法直接重构,输出形状与原始矩阵完全一致为(256, 256, 2)
reconstructed_mat = U @ s_diag @ vh

验证方法

你可以用如下代码验证重构精度,正常浮点计算误差会小于1e-10:

# 原始矩阵记为original_mat
print(np.allclose(original_mat, reconstructed_mat))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:30:00