gpt4 book ai didi

c - 使用指针的矩阵乘法错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:34 27 4
gpt4 key购买 nike

我正在尝试按照给定的方式进行矩阵乘法优化 here :

for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
{
for(j=0;j<n;j++)
C[i][j]+=A[i][k]*B[k][j];
}
}

我正在尝试使用矩阵指针而不是静态数组来实现上述功能:

int *A,*B,*C;

A= (int*)malloc(sizeof(int*)*(n * n));
B= (int*)malloc(sizeof(int*)*(n * n));
C= (int*)malloc(sizeof(int*)*(n * n));

for ( i = 0 ; i < n ; i++ )
{
for ( k = 0 ; k < n ; k++ )
{ sum=0;
for ( j = 0 ; j< n ; j++ )
{
double c =A[i*n + k];
double d =B[k*n + j];
sum+=c*d;
}
C[i*n + j] =sum;
}


}

但答案与上面的代码片段不同。
我在 Linux ubuntu 12.04 中运行这段代码。请帮助解决这个问题。有逻辑错误吗?

更新

考虑以下示例:

matrix A

1 1

1 1



matrix B

1 1

1 1

预期的输出矩阵是

  matrix C 

2 2

2 2

但是对于如上所示使用指针的矩阵乘法优化,输出是不同的

   matrix C

0 0

7 9

最佳答案

sum=0;
for ( j = 0 ; j< n ; j++ )
{
double c =A[i*n + k];
double d =B[k*n + j];
sum+=c*d;
}
C[i*n + j] =sum;

您的代码有两个问题。

  1. 加上总和是错误的。 (逻辑错误)
  2. i*n + j 当 j 循环时,总是 n(2)。

应该是

for ( i = 0 ; i < n ; i++ ){
for ( k = 0 ; k < n ; k++ ){
for ( j = 0 ; j< n ; j++ ){
C[i*n + j] +=A[i*n + k]*B[k*n + j];//C initialized by 0
}
}
}

也应该是

A= (int*)malloc(sizeof(int)*(n * n));//not sizeof(int*)
B= (int*)malloc(sizeof(int)*(n * n));
C= (int*)calloc(n*n, sizeof(int));

关于c - 使用指针的矩阵乘法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com