Matlab 快速打印3D矩阵

Matlab 快速打印3D矩阵,matlab,matrix,octave,Matlab,Matrix,Octave,我有一个3D大矩阵,第一个索引(x)表示频率,第二个和第三个索引(y和z)是数据的索引。我想打印所有频率的每个索引的数据,然后打印一个字符和一个新行字符。我是这样做的: % 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)); fp

我有一个3D大矩阵,第一个索引(
x
)表示频率,第二个和第三个索引(
y
z
)是数据的索引。我想打印所有频率的每个索引的数据,然后打印一个
字符和一个新行字符。我是这样做的:

% 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解决方案也可以工作。

以下是加快速度的一般方法:

  • 计算所有要计算的内容,将每个结果存储为数字或字符串
  • 以1次打印的方式将结果打印到文件中

  • 如果我正确理解了您的输入数据,则您的循环相当于:

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

    fprintf
    在格式字符串到达末尾时使用格式字符串重新开始。排列是保持代码顺序所必需的。

    您需要查看打印时实际花费的时间,哪部分是慢位?例如,某些控制台限制了滚动速度。@TimB,我不明白,我给出的代码只有一部分。你的矩阵S的大小是(N,N,N)吗?你用
    N=size(S,2)
    来表示第二和第三维度。但是在幕后,计算机正在做很多事情。当您执行fprintf时,它会将输出输出输出到某个地方,这有很多步骤。例如,如果它在windows计算机上打印为std out,则CMD提示符将不允许您以超过特定速度滚动,并且您的程序将花费大量时间等待。如果它通过网络发送数据,速度可能会很慢。甚至写入本地磁盘也比写入本地内存慢,等等。基本上,您有xyz项,这是一个增长非常快的数字。您需要打印更少的数据或加快打印过程。如何一次性打印结果?
    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