将 59x16 double 重塑为 236x4?
Reshape 59x16 double into 236x4?
如何在 MATLAB 中重塑矩阵,最好使用 reshape
?
一个简单的矩阵设置:
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)];
也许可以用更简单的方法来完成,但似乎可行。
如何在 MATLAB 中重塑矩阵,最好使用 reshape
?
一个简单的矩阵设置:
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)];
也许可以用更简单的方法来完成,但似乎可行。