矩阵维度必须一致。 出错 zip_img_by_svd (第 11 行) while (temp / sum(s)) < rate % 选取奇异值和需要达到的权重
时间: 2024-10-16 11:14:37 浏览: 37
svd.zip_SVD_svd 文本_svd文件_thankhr_矩阵奇异值分解
这个错误提示意味着在执行 `while` 循环里的条件判断时出现了问题,原因在于你试图比较两个不同维度的数组。在这个上下文中,`temp` 和 `sum(s)` 都是向量(因为它们来自奇异值分解的结果),但是在这里你尝试将它们作为比例进行计算,这就导致了维度不匹配的错误。
在MATLAB或Python中,当你尝试对两个向量进行除法运算时,它们必须具有相同的长度。在这种情况下,可能是你在计算`sum(s)`时没有考虑到`s`是一个奇异值向量,它通常只有一维,而`temp`也是单个数值,所以当你试图将这两个做除法时会出错。
解决这个问题,你需要确保`sum(s)`是正确的,如果是从`svd`函数返回的奇异值向量,你应该先将其展平为一维数组再求和。例如,在MATLAB中,可以改为:
```matlab
temp = temp + s(sigma_i);
sigma_i = sigma_i + 1;
```
然后在检查之前,将`s`展平:
```matlab
sum_s = sum(sqrt(s.^2)); % 或者使用其他适合的方法求和,取决于s的实际形状
```
在Python中,你可以类似地使用`numpy.sum()`并考虑奇异值是否是一维的:
```python
temp += sigma[sigma_i]
sigma_i += 1
sum_s = sum(sigma**2)
```
记得修复这一错误后继续执行代码,直到遇到下一条错误。
阅读全文