我有一个巨大的稀疏矩阵a
,我想将其保存在.csv
中。我无法拨打full(a)
,因为我没有足够的内存。因此,使用dlmwrite
参数调用full(a)
是不可能的。我们必须注意dlmwrite
不适用于稀疏格式的矩阵。
.csv
格式如下所示。请注意,带有字符的第一行和第一列应包含在.csv
文件中。 <{1}}文件的(0,0)
位置中的分号也是必需的。
.csv
请你帮我解决这个问题,最后以所需的形式保存稀疏矩阵?
答案 0 :(得分:1)
您可以使用csvwrite
功能:
csvwrite('matrix.csv',a)
答案 1 :(得分:0)
您可以迭代执行此操作,如下所示:
A = sprand(20,30000,.1);
delimiter = ';';
filename = 'filecontaininghugematrix.csv';
dims = size(A);
N = max(dims);
% create names first
idx = 1:26;
alphabet = dec2base(9+idx,36);
n = ceil(log(N)/log(26));
q = 26.^(1:n);
names = cell(sum(q),1);
p = 0;
for ii = 1:n
temp = repmat({idx},ii,1);
names(p+(1:q(ii))) = num2cell(alphabet(fliplr(combvec(temp{:})')),2);
p = p + q(ii);
end
names(N+1:end) = [];
% formats for writing
headStr = repmat(['%s' delimiter],1,dims(2));
headStr = [delimiter headStr(1:end-1) '\n'];
lineStr = repmat(['%f' delimiter],1,dims(2));
lineStr = ['%s' delimiter lineStr(1:end-1) '\n'];
fid = fopen(filename,'w');
% write header
header = names(1:dims(2));
fprintf(fid,headStr,header{:});
% write matrix rows
for ii = 1:dims(1)
row = full(A(ii,:));
fprintf(fid, lineStr, names{ii}, row);
end
fclose(fid);
对于此示例,names
单元阵列对内存要求很高。我现在没有时间解决这个问题,所以如果它确实是一个问题,请自己考虑这个部分;)提示:只需明智地编写标题元素,首先是A;
,然后是B;
,依此类推。对于行,您可以创建一个将索引ii
映射到所需字符的函数,在这种情况下,不需要完整的第一部分。