我有一个三维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])