我有一个三维Matlab矩阵,形状为3x4x5。现在,我想将此矩阵写入一维.txt文件,并用C读回。

但是,写入的数字应首先是x和y维(因此4x5),然后是z维(3)。

填充矩阵的示例代码:

duneven = 1:3*4*5
duneven = reshape(duneven,[3 4 5]);


我希望通过这样排列矩阵来获得这种效果:

duneven = permute(duneven,[3 1 2]);


并像这样写出来:

fp = fopen('testuneven.txt','w');
fprintf(fp,'%f ',duneven);
fclose(fp);


但是,用C读取它-像这样:

FILE* fp;
fp = fopen("testuneven.txt","r");

for(int i = 0; i < 3*4*5;i++){
   float var;
   fscanf(fp,"%f ",&var);
   printf("%f ",var);
}
fclose(fp);


在Matlab中读取它会得到相同的输出。此外,将文件放在外壳中可以得到相同的结果。因此,问题出在Matlab代码中

不返回所需的输出。而是打印出第一个列。如何解决此问题?

最佳答案

我猜您在permute()调用中混合了顺序。所需尺寸订单统计信息的初始描述为4x5,然后为3
您的代码

duneven = 1:3*4*5
duneven = reshape(duneven,[3 4 5]);
duneven = permute(duneven,[3 1 2])

产生5x3x4。
考虑使用duneven = permute(duneven,[2 3 1])

09-20 01:52