【发布时间】:2013-12-15 02:16:48
【问题描述】:
我一直在编写一些代码来使用 C 实现离散余弦变换。这是我用于矩阵乘法的代码。
float Yt[8][8][4];
float Y8[8][8][4]={{{0.980785,-0.555570,0.555570 ...}}};
float A[8][8]={{0.707107,0.707107 ... }};
for(k=0;k<4;++k){
for(i=0;i<8;++i){
for(j=0;j<8;++j){
Yt[i][j][k]=0;
}}}
for(k=0;k<4;++k){
for(i=0;i<8;++i){
for(j=0;j<8;++j){
for(l=0;l<8;++l){
Yt[i][j][k]+=A[i][l]*Y8[l][j][k];
}}}}
Y8 是同一个 8x8 矩阵,重复 4 次。
我的代码成功编译并运行。但是,我收到的输出显然是不正确的。 Yt[i][j][k] for k=0,1,2,3 应该都是相同的值,但我最终得到 k=0,1 的正确值和 k=2,3 的不同值。
谁能明白为什么我得到的最后两个矩阵的值不正确?
【问题讨论】:
-
在
for(l=0;l<8;++l)之前添加Yt[i][j][k] = 0.0。 -
我会添加一些代码来强制执行
Y8[][][1:3] == Y8[][][0],然后再试一次。放在Yt的初始化循环里就行了:Y8[i][j][k] = Y8[i][j][0];
标签: c matrix matrix-multiplication