在MATLAB中将结果写入二进制文件

时间:2015-05-26 19:46:27

标签: matlab function for-loop binaryfiles fwrite

我正在尝试将代码的结果写入二进制代码。

我有一个学生版的MATLAB,所以我不确定如何运行调试过程。

在任何情况下,我都不确定这个循环过程是否适用于fwrite函数。

function write_out(A, file_name)
fid = fopen(file_name, 'w+');
if fid < 0
    error('error opening file %s\n', file_name);
end
[nrow ncol] = size(A);
total = 0;
for i = 1:nrow
    for j = 1:ncol
        if A(i,j) ~= 0
            total = total + 1;
        end
    end
end
d = total;
w = [];
k = [];
for i = 1:nrow
    for j = 1:ncol
        if A(i,j) ~= 0
            w = [w;A(i,j)];
            k = [k;[i,j]];
        end
    end
end
fwrite(fid, nrow, 'uint32');
fwrite(fid, ncol, 'uint32');
fwrite(fid, total, 'uint32');

for i = 1:nrow
    for j = 1:ncol
        fwrite(fid, w(i), 'uint32');
        fwrite(fid, w(j), 'uint32');
        fwrite(fid, k(i,j), 'double');
    end
end
fclose(fid);

1 个答案:

答案 0 :(得分:0)

我认为您的问题是wk的大小。据我所知,w的尺寸为total x 1k的尺寸为total x 2。然而,您可以在尺寸为a ...

的二维循环中访问它们 顺便说一下,你应该学习如何使用MATLAB的向量和矩阵运算代替循环。例如,您可以在没有循环的情况下计算total

total = sum(sum(A~=0));

以及wk

w = A(A~=0);
k = ind2sub(find(A~=0));

我并不完全明白你要写的是什么,但你可以使用

fwrite(fid,w,'uint32')

一次写下整个矢量。