MATLAB의 요소 별 배열 복제
-
21-09-2019 - |
문제
1 차원 배열이 있다고 가정 해 봅시다.
a = [1, 2, 3];
배열과 정수를 취하는 내장 MATLAB 기능이 있습니까? n
배열 n 번의 각 요소를 복제합니까?
예를 들어 전화합니다 replicate(a, 3)
돌아와야합니다 [1,1,1,2,2,2,3,3,3]
.
이것은 전혀 동일하지 않습니다. repmat
. 나는 확실히 구현할 수있다 replicate
그렇게함으로써 repmat
각 요소에서 결과를 연결하지만 더 효율적인 기능이 내장되어 있는지 궁금합니다.
해결책
R2015a 기준, 이있다 이를 위해 내장 및 문서화 된 기능, repelem
:
repelem
배열의 요소를 복제합니다.
W = repelem(V,N)
, 벡터와 함께V
그리고 스칼라N
, 벡터를 만듭니다W
각 요소V
반복됩니다N
타임스.
두 번째 인수는 또한 같은 길이의 벡터 일 수 있습니다. V
각 요소에 대한 복제 수를 지정합니다. 2D 복제 :
B = repelem(A,N1,N2)
필요하지 않습니다 kron
또는 더 이상 다른 트릭!
업데이트: 다른 빠른 방법과의 성능을 비교하려면 Q & A를 참조하십시오. 배열 요소의 사본 반복 : MATLAB의 런 길이 디코딩.
다른 팁
a = [1 2 3];
N = 3;
b = reshape(repmat(a,N,1), 1, [])
>> n=3;
>> a(floor((0:size(a,2)*n-1)/n)+1)
ans =
1 1 1 2 2 2 3 3 3
일부 이국적인 대안. 유용한 것보다 더 재미있다 :
(첫 번째) 결과를 할당하십시오
meshgrid
벡터에 :b = NaN(1,numel(a)*n); %// pre-shape result b(:) = meshgrid(a,1:n);
곱한 매트릭스를 만듭니다
a
결과를 제공합니다.b = a * fliplr(sortrows(repmat(eye(numel(a)),n,1))).';
사용
ind2sub
지수를 생성하려면 :[~, ind] = ind2sub([n 1],1:numel(a)*n); b = a(ind);
이미지 처리 도구 상자가있는 경우 또 다른 대안이 있습니다.
N = 3;
imresize(a, [1 N*numel(a)],'nearest')
% To get b = [1 1 1 2 2 2 3 3 3]
N = 3;
a = [1 2 3];
temp_a = a(ones(N,1),:);
b = reshape(temp_a,1,numel(temp_a));
% To get b = [1 2 3 1 2 3 1 2 3]
N = 3;
a = [1 2 3];
temp_a = a(ones(N,1),:);
b = reshape(temp_a',1,numel(temp_a));
제휴하지 않습니다 StackOverflow