Если у меня есть матрица size(mat)= X*Y*6
Как изменить размер матрицы MatLab
давайте называть mat(:,:,1)=A
и mat(:,:,2)=B
и так далее
как я rezise мата X * Y * 12
где
mat(:,:,1)=mat(:,:,2)= A
mat(:,:,3)=mat(:,:,4)=B
и т. Д.
Если у меня есть матрица size(mat)= X*Y*6
Как изменить размер матрицы MatLab
давайте называть mat(:,:,1)=A
и mat(:,:,2)=B
и так далее
как я rezise мата X * Y * 12
где
mat(:,:,1)=mat(:,:,2)= A
mat(:,:,3)=mat(:,:,4)=B
и т. Д.
Вы можете использовать следующий синтаксис:
%defines input matrix (in your case it is already defined)
m = 500;
n = 400;
z = 6;
mat = rand(m,n,z);
%initialize output matrix
newMat = zeros(m,n,z*2);
%assign old matrix values into the new matrix
newMat(:,:,1:2:end) = mat;
newMat(:,:,2:2:end) = mat;
Если у вас есть Matlab 2015a или более поздней версии, вы можете использовать repelem
:
N = 2; %// number of times to repeat
result = repelem(mat, 1, 1, N); %// repeat N times along 3rd dim
Для более старых версий Matlab вы можете сделать это вручную следующим образом:
N = 2; %// number of times to repeat
ind = ceil(1/N:1/N:size(mat,3)); %// build index with repetitions
result = mat(:,:,ind); %// apply index along desired dim
Пример:
>> %// Data
>> mat = randi(9,2,4,2)
mat(:,:,1) =
5 8 9 2
7 3 1 5
mat(:,:,2) =
5 7 1 1
1 8 8 2
>> %// First approach
>> N = 2;
>> result = repelem(mat, 1, 1, N)
result(:,:,1) =
5 8 9 2
7 3 1 5
result(:,:,2) =
5 8 9 2
7 3 1 5
result(:,:,3) =
5 7 1 1
1 8 8 2
result(:,:,4) =
5 7 1 1
1 8 8 2
>> %// Second approach
>> N = 2;
>> ind = ceil(1/N:1/N:size(mat,3));
>> result = mat(:,:,ind)
result(:,:,1) =
5 8 9 2
7 3 1 5
result(:,:,2) =
5 8 9 2
7 3 1 5
result(:,:,3) =
5 7 1 1
1 8 8 2
result(:,:,4) =
5 7 1 1
1 8 8 2
На ваших последних двух строках, вы не имеете в виду: 'newMat (:,:, 1: 2: end) = mat'? – Suever
@Suever - определенно - вот что я имел в виду :) спасибо за ваш комментарий! – drorco