我正在尝试将代码的结果写入二进制代码。
我有一个学生版的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);
答案 0 :(得分:0)
我认为您的问题是w
和k
的大小。据我所知,w
的尺寸为total x 1
,k
的尺寸为total x 2
。然而,您可以在尺寸为a
...
total
:
total = sum(sum(A~=0));
以及w
和k
:
w = A(A~=0);
k = ind2sub(find(A~=0));
我并不完全明白你要写的是什么,但你可以使用
fwrite(fid,w,'uint32')
一次写下整个矢量。