我想将用MATLAB编写的代码转换为C:
matrix = [1 2 3; 4 5 6; 7 8 10]
dis=zeros(9);
for i=1:3
for j=1:3
dis(i,j)=sqrt(sum (abs((matrix(i,:)-matrix(j,:))))^2);
end
end
输出如下:
0 9 19
9 0 10
19 10 0
这是我在C语言中想到的:
#include <stdio.h>
#include <math.h>
int main() {
int distance[3][3] = {0};
int myArray[3][3] = { {1, 2, 3}, {4 , 5, 6}, {7, 8, 9} };
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
int distance = sqrt(pow(myArray[i] - myArray[j], 2));
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", distance[i][j]);
if (j == 2) {
printf("\n");
}
}
}
return 0;
}
但是它显示一个空数组:
0 0 0
0 0 0
0 0 0
我的错误在哪里?
所以您正在做一些允许的事情,但会导致程序的功能失效,所以让我们看一下:
int distance[3][3] = {0};
int distance = sqrt(pow(myArray[i] - myArray[j], 2));
您两次启动相同的变量->这是for循环中的局部变量。因此,您正在计算并删除它。在C语言中,局部变量可以被覆盖。因此,此问题的解决方案是删除int以进行计算。一旦执行此操作,您将获得以下输出:
0 3 6
3 0 3
6 3 0
为什么会这样。答案是因为您处理数组错误。像Matlab一样,C语言不支持矩阵格式。这意味着您计算的这一部分是错误的:
myArray[i] - myArray[j]
仅计算
myArray[i][0]-myArray[j][0]
即使您想使用myArray[i][0]-myArray[j][0]
进行此计算,因为另一种方法也会导致混淆。
您需要在变量级别而不是向量或矩阵级别处理计算。例如……:(相同矩阵的2个向量的skalar)
int mymatrix [3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,sum=0;
for(i=0;i<3;i++)
{
sum=sum+mymatrix[0][i]*mymatrix[1][i]
}
因此,基本上,您需要重做计算。