[英]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.