更快地打印3D矩阵

时间:2014-05-01 14:23:05

标签: matlab matrix octave

我有一个3D大型矩阵,第一个索引(x)表示频率,第二个和第三个索引(yz)是数据的索引。我想打印所有频率的每个索引的数据,然后打印|字符和新的行字符。我通过以下方式执行此操作:

% S is a 3D matrix of size (x,y,z), where y=z and x>>y
N=size(S,2);
MM=real(S);
for mi=1:N
    for mj=1:N
        fprintf(fid,"%.16g ",MM(:,mi,mj));
        fprintf(fid,"|\n");
    end
end

但是对于大型矩阵来说,这是非常缓慢的。有没有办法加快这个过程?

这是以八度音程完成的,这意味着Matlab解决方案也可以正常工作。

3 个答案:

答案 0 :(得分:5)

如果我理解您的输入数据是正确的,那么您的循环等同于:

fprintf(fid,[repmat('%.16g ',1,size(S,1)) '|\n'],permute(real(S),[1,3,2]));

fprintf在到达结尾时开始使用格式字符串。必须使用置换来保存代码中的顺序。

答案 1 :(得分:-1)

这是加快速度的一般方法:

  1. 计算您要计算的所有内容,将每个结果存储为数字或字符串
  2. 将结果打印到1中的文件

答案 2 :(得分:-1)

m=zeros(3,4,5);
[x,y,z]=size(m);
for k=1:x
    for l=1:y
        dlmwrite('D:\test.txt',m(k,l,:),'-append','delimiter',' ','newline','pc');
    end
    dlmwrite('D:\test.txt',[' '],'-append','newline','pc');
end