如何在MATLAB中重塑矩陣,最好使用reshape
?將59x16重塑爲236x4?
一個簡單的矩陣設置:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
,我要重塑成
B = [1 4; 2 5; 3 6; 7 10; 8 11; 9 12]
我試過的reshape
衆多的設置,但我不能弄明白。
1 2 3 4
5 6 7 8
重塑成
1 2
5 6
3 4
7 8
如何在MATLAB中重塑矩陣,最好使用reshape
?將59x16重塑爲236x4?
一個簡單的矩陣設置:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
,我要重塑成
B = [1 4; 2 5; 3 6; 7 10; 8 11; 9 12]
我試過的reshape
衆多的設置,但我不能弄明白。
1 2 3 4
5 6 7 8
重塑成
1 2
5 6
3 4
7 8
如果我理解正確的轉變是:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
B = A(:,1:end/2);
B = [B;A(:,end/2+1:end)];
這是正確的嗎?
編輯: 或者一般的情況:
function [B] = elefaaant(A,n)
[a,b] = size(A);
if mod(b,n) ~= 0
error('Cannot reshape')
end
B = zeros(a*n,b/n);
fac = b/n;
for i = 1:n
B((i-1)*a+1:i*a,:) = A(:,(i-1)*fac+1:i*fac);
end
您可以使用reshape
和permute:
reshape(permute(reshape(A,size(A,1),2,[]),[1 3 2]),[],2)
由於@LuisMendo這表明修改的答案,以避免因大小A
。
B = A(:,1:end/2);
B = [B;A(:,end/2+1:end)];
C = B(:,1:end/2);
C = [C;B(:,end/2+1:end)];
也許它可以做一個更簡單的方式,但似乎工作。
但這和你所要求的不一樣,對吧?我將矩陣描繪成四個「塊」,即您目前水平堆疊但想垂直放置的「[A B C D]」。這個代碼不是'[A B; C [D]'然後是'[A; C; B; D]',而你的例子將等於'[A; B; C; D]'? – Adriaan
如果我有[A B C D],我想要的是將它轉換成[A B; C D] 如果我的矩陣更大[A B C D E F G H; 1 2 3 4 5 6 7 8],那麼函數應該將它轉換爲[A B C D; 1 2 3 4; E F G H; 5 6 7 8] – ELEFAAANT
你所描述的是通過你的代碼的一個步驟。你的答案中的代碼是做了兩步,第二步與你a)在答案中描述的不同,b)其他答案包括被接受的答案。因此,我的評論,你的代碼做了不同的事情。 – Adriaan
看到更新,我不小心切換了indecies。 –
是的,這改變了我的「短」示例正確。但是這不適用於我有一個數字X 16矩陣的設置,我想將其轉換爲數字X 4矩陣。 – ELEFAAANT
通過將列的一半改爲四分之一的列,您可以輕鬆地擴展它。 –