簡體   English   中英

使用Matlab將4d矩陣整形為向量的單元格數組

[英]using Matlab to reshape a 4d matrix into a cell array of vectors

我有一個4D矩陣(尺寸-x,y,z,t)。 我想將其重塑為長度為x*y*z一維單元數組,其中每個元素都是大小為t的長向量,該向量捕獲每個體積位置(x,y,z)所有元素。 之后,我需要重塑它。

我想到了遍歷數組來執行此操作,因為我真的找不到內置函數來執行此操作。

任何見解將非常有幫助! 謝謝!

看看這是否是您想要的:

x = randn(2,3,4,5); % example data
x = reshape(x, [], size(x,4)); % collapse first three dimensions
x = mat2cell(x, ones(1,size(x,1)), size(x,2)); % split first dimension into cells

Luis的答案非常適合半向量化( mat2cell使用循環)。 如果您想要的是每個元素均為t長的大小為x*y*z的單元格數組,則可以在每個體積位置上使用循環,並提取“暫時”占據4D這個位置的t元素。 確保squeeze任何單例尺寸以得到結果矢量。 如果您想采用循環方法,則需要考慮這一點。 假設您的矩陣稱為A ,請嘗試以下操作:

B = cell(size(A,1)*size(A,2)*size(A,3), 1);
count = 1;
for ii = 1 : size(A,1) 
    for jj = 1 : size(A,2)
        for kk = 1 : size(A,3)
            B{count} = squeeze(A(ii,jj,kk,:));
            count = count + 1;
        end
    end
end

要將其恢復為4D矩陣形式,您只需應用相同的邏輯,但相反:

Ar = zeros(size(A));
count = 1;
for ii = 1 : size(A,1) 
    for jj = 1 : size(A,2)
        for kk = 1 : size(A,3)
            Ar(ii,jj,kk,:) = B{count};
            count = count + 1;
        end
    end
end

類似於Luis的解決方案,但更簡單,更完整:

% Transform to cell
x = randn(2,3,4,5); % example data
y = reshape(x, [], size(x,4));
z = num2cell(y,2);

% transform back 
x = reshape(cat(1,z{:}), size(x));

暫無
暫無

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

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