簡體   English   中英

更快地打印3D矩陣

[英]Faster print of a 3D matrix

我有一個3D大型矩陣,第一個索引( x )代表頻率,第二個和第三個索引( yz )是數據的索引。 我想打印所有頻率的每個索引的數據,然后打印| char和新行char。 我通過以下方式執行此操作:

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

如果我理解您的輸入數據是正確的,那么您的循環相當於:

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

fprintf在到達結尾時開始使用格式字符串。 必須使用permute來保存代碼中的順序。

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

  1. 計算要計算的所有內容,將每個結果存儲為數字或字符串
  2. 將結果打印到文件中
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM