我在MATLAB(版本7)中有一个30000x14000稀疏矩阵,我需要在另一个程序中使用它.调用save不会将其写为ASCII(不支持).调用full()这个怪物会导致 Out of Memory错误.
我该如何出口?
小智 28
您可以使用find来获取索引和值向量:
[i,j,val] = find(data)
data_dump = [i,j,val]
Run Code Online (Sandbox Code Playgroud)
您可以使用spconvert从data_dump重新创建数据,这意味着"从稀疏矩阵外部格式导入"(所以我猜它是一个很好的导出格式):
data = spconvert( data_dump )
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令保存到ascii:
save -ascii data.txt data_dump
Run Code Online (Sandbox Code Playgroud)
但是这会将索引转储为double,你可以用fopen/fprintf/fclose更好地写出来:
fid = fopen('data.txt','w')
fprintf( fid,'%d %d %f\n', transpose(data_dump) )
fclose(fid)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
将稀疏矩阵保存为.mat文件.然后,在另一个程序中,使用合适的库来读取.mat文件.
例如,如果其他程序是用Python编写的,则可以使用该scipy.io.mio.loadmat函数,该函数支持稀疏数组并为您提供稀疏的numpy矩阵.
我在 MATLAB 中使用 Java 将其保存为文本。MATLAB代码:
pw=java.io.PrintWriter(java.io.FileWriter('c:\\retail.txt'));
line=num2str(0:size(data,2)-1);
pw.println(line);
for index=1:length(data)
disp(index);
line=num2str(full(data(index,:)));
pw.println(line);
end
pw.flush();
pw.close();
Run Code Online (Sandbox Code Playgroud)
这data是一个非常大的稀疏矩阵。