我有一个三维Matlab矩阵,形状为3x4x5
。现在我想将此Matrix写入1维的.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中读出它会产生相同的输出。此外,在shell中输出文件会返回相同的结果。所以这个问题位于Matlab代码
中不回馈所需的输出。相反,它打印出第一个cols。我该如何解决这个问题?
答案 0 :(得分:1)
我猜你在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])
答案 1 :(得分:0)
问题是,matlab按列方式写出矩阵,而C则以行方式读取矩阵。可以肯定的是,它写得正确,我做了以下几点:
duneven = 1:3*4*5
duneven = reshape(duneven,[3 4 5]);
%in case that the shape is not known
duneven_shape = size(duneven);
fileID = fopen('testunven.txt','w')
for i=1:duneven_shape(1)
v = reshape(squeeze(duneven (i,:,:))',[1 duneven_shape(2)*duneven_shape(3)]);
fprintf(fileID,"%f ",v);
end
fclose(fileID);