Octave / Matlab : 벡터에 새 요소 추가
벡터가 x
있고 요소 ( newElem
) 를 추가해야합니다 .
-사이에 차이점이 있습니까?
x(end+1) = newElem;
과
x = [x newElem];
?
x(end+1) = newElem
좀 더 강력합니다.
x = [x newElem]
x
행 벡터 인 경우 에만 작동 하고 열 벡터를 x = [x; newElem]
사용해야 하는 경우 에만 작동합니다 . x(end+1) = newElem
그러나 행 벡터와 열 벡터 모두에서 작동합니다.
그러나 일반적으로 성장하는 벡터는 피해야합니다. 이 작업을 많이 수행하면 코드가 크롤링 될 수 있습니다. 생각해보십시오 : 배열을 늘리려면 새 공간을 할당하고, 모든 것을 복사하고, 새 요소를 추가하고, 오래된 엉망을 정리하는 작업이 포함됩니다 ... 정확한 크기를 미리 알고 있다면 시간 낭비입니다. :)
@ThijsW의 답변에 추가하기 만하면 연결 방법에 비해 첫 번째 방법에 상당한 속도 이점이 있습니다.
big = 1e5;
tic;
x = rand(big,1);
toc
x = zeros(big,1);
tic;
for ii = 1:big
x(ii) = rand;
end
toc
x = [];
tic;
for ii = 1:big
x(end+1) = rand;
end;
toc
x = [];
tic;
for ii = 1:big
x = [x rand];
end;
toc
Elapsed time is 0.004611 seconds.
Elapsed time is 0.016448 seconds.
Elapsed time is 0.034107 seconds.
Elapsed time is 12.341434 seconds.
나는이 시간을 2012b에서 실행했지만 matlab 2010a에서 동일한 컴퓨터에서 동일한 코드를 실행했을 때
Elapsed time is 0.003044 seconds.
Elapsed time is 0.009947 seconds.
Elapsed time is 12.013875 seconds.
Elapsed time is 12.165593 seconds.
따라서 속도 이점은 최신 버전의 Matlab에만 적용되는 것 같습니다.
앞서 언급했듯이를 x(end+1) = newElem
사용하면 벡터가 전치되었는지 여부에 관계없이 벡터를 스칼라와 연결할 수 있다는 장점이 있습니다. 따라서 스칼라 추가에 더 강력합니다.
그러나 잊지 말아야 할 것은 x = [x newElem]
한 번에 여러 요소를 추가하려고 할 때도 작동 한다는 것입니다. 또한 이것은 행렬을 연결하려는 경우에 좀 더 자연스럽게 일반화됩니다.M = [M M1 M2 M3]
대체로 스칼라 일 수도 있고 아닐 수도있는 기존 벡터를 연결할 수있는 솔루션을 원한다면 다음 x
과 newElem
같이 트릭을 수행해야합니다.
x(end+(1:numel(newElem)))=newElem
참고URL : https://stackoverflow.com/questions/16188058/octave-matlab-adding-new-elements-to-a-vector
'programing tip' 카테고리의 다른 글
CoreData에 어레이를 저장하는 방법은 무엇입니까? (0) | 2020.10.28 |
---|---|
클래스에 속성이 있는지 확인 (0) | 2020.10.27 |
제네릭 메서드는 어떻게, 언제, 어디서 구체화됩니까? (0) | 2020.10.27 |
dplyr에서 조인 할 때 x 및 y에 대한 열 이름을 지정하는 방법은 무엇입니까? (0) | 2020.10.27 |
Kotlin에서 데이터베이스 연결 또는 내장형 Elasticsearch 서버 시작 / 중지와 같은 단위 테스트 리소스를 어떻게 관리하나요? (0) | 2020.10.27 |