Combine arrays to form another arrays
1 次查看(过去 30 天)
显示 更早的评论
Hello, can we combine many arrays into another arrays?
for example:
k = 5;
for u=1:k
H(:,:,u)=randn(M,N)+j*randn(M,N);
end
for u=1:k
Hi(:,:,1)=[H(:,:,2);H(:,:,3);H(:,:,4);H(:,:,5)];
Hi(:,:,2)=[H(:,:,1);H(:,:,3);H(:,:,4);H(:,:,5)];
Hi(:,:,3)=[H(:,:,1);H(:,:,2);H(:,:,4);H(:,:,5)];
Hi(:,:,4)=[H(:,:,1);H(:,:,2);H(:,:,3);H(:,:,5)];
Hi(:,:,5)=[H(:,:,1);H(:,:,2);H(:,:,3);H(:,:,4)];
end
what if k=19, should I repeat all the steps. Are there other simpler programs to combine it. Thank you
1 个评论
Pierre Benoit
2014-9-9
What is the relation between the number of arrays you wish to concatenate each time and k ? Is it always 4, or k-1 or something else ?
采纳的回答
Guillaume
2014-9-9
H = randn(M, N, k) + j*randn(M, N, k); %no need for loop
c = num2cell(H, [1 2]); %split H into cell array along 3rd dimension
for u=1:k
indices = [1:u-1 u+1:k]; %get numbers 1:k without u
Hi(:, :, u) = vertcat(c{indices}); %use cell array to comma separated list expansion to feed vertcat
end
更多回答(1 个)
Pierre Benoit
2014-9-9
编辑:Pierre Benoit
2014-9-9
M = 5;
N = 5;
k = 5;
H = randn(M, N, k) + j*randn(M, N, k);
permut = nchoosek(1:k,k-1); % Find all permutations
permut = permut(end:-1:1,:); % Flip array
Hi = reshape(permute(reshape(H(:,:,permut'),[M N k-1 k]),[1 3 2 4]),
[M*(k-1) N k]);
Or with a for-loop to be more explicit
Hi = zeros(M*(k-1),N,k); % Pre-allocation
for ii = 1:k-1
Hi(:,:,ii) = reshape(permute(H(:,:,permut(ii,:)),[1 3 2]),[M*(k-1) N]);
end
1 个评论
Andrei Bobrov
2014-9-9
variant
M = 4;
N = 3;
k = 5;
H = randn(M, N, k) + 1i*randn(M, N, k);
p = flipud(nchoosek(1:k,k-1));
Tout = permute(reshape(permute(H(:,:,p),[1 3 2]),[],k-1,N),[1 3 2]);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!