2012-08-24 2 views
3

콜론 연산자 및 MATLAB의 벡터 확장에 관한 질문이 있습니다. 내 문제는 다음 코드 줄을 다른 순서에 사용할 수 있도록 확장하는 방법을 이해하는 것입니다. MATLAB 코드 행은 다음과 같습니다.MATLAB의 콜론 작업 조합

a(1:2:5) = 1:-4:-7 

확장 전에는 a이 정의되어 있지 않습니다. 이건 내 문제는 어떻게 a(1:2:5)1:-4:-7의 조합이 위치 25에서 제로와 다섯 개 가지 요소의 벡터를 반환하는 이유를 이해하는 것입니다,

a = 1 0 3 0 -7 

내가 콜론 연산자가 {start}:{step}:{stop} 작동 방법을 알고 벡터를 반환?

답변

1

matlab에 당신이 요소에 indecing하고 감지 할 때마다 매트릭스/배열의 외부 현재의 경계, 그 것이다 제로와 자동 패드 누락 된 요소 :

>> clear b; b(10) = 5 
b = 
    0  0  0  0  0  0  0  0  0  5 

이 기능은 매우 유용 모두 이며, 매우 위험. 자신의 경우와 같이 선언을 매우 쉽게 만들 수있는 경우에 유용합니다.

a = zeros(10,1); 
for ii = 1:10 
    a(ii+1) = rand; 
end 
: 당신은 성장 배열을 발견하기 어려울 수 있습니다,

% cannot pre-allocate (zeros() or ones() give double/uint8/..., not myClass) 
for ii = 1:499 
    myClassArray(ii) = myClass; % so, growing array 
end 
myClassArray(500) = myClass(1,2); 

같은 것보다 무한히 더

myClassArray(500) = myClass(1, 2); 

뭔가를 실행하여 맞춤형 클래스의 전체 배열을 만들 수 있지만,

으로 성능이 크게 떨어질 수 있습니다. 또한 Matlab에서 프로토 타입 화 된 코드를 C++과 같은 정적 유형 언어로 변환 할 때이 코드를 복사하면 버퍼 오버플로가 발생하여 segfault가 발생합니다.

이제, 귀하의 경우에가는 :

clear a; a(1:2:5) = 1:-4:-7 

1:2:5 배열 [1 3 5]로 확장됩니다, 그리고 1:-4:-7는 값 [1 -3 -7]을 줄 것이다. 변수 a이 아직 존재하지 않으므로 Matlab은 새로운 것을 만들고 [1 3 5] 값을 [1 -3 -7]으로 채 웁니다. 변수 a (즉, [2 4])을 초기화하기 위해 건너 뛴 인덱스는 자동으로 0으로 초기화됩니다.

파이썬에 익숙하다면

, 그것은 구문 같은 비트가 여러 변수

x,y = 1,2 

에하지만 당신의 MATLAB 경우에 여러 값을 할당 할 수있어, 이러한 다양한 변수가 존재하지 않는 배열 인덱스는, 유효하고 일관된 배열로 만들기 위해 "구멍을 채우는 것"이 ​​필요합니다.

이 점이 명확한가요?

+0

매우 철저한 답변, 고마워요! – johnhenning

1

a(1:2:5)을 정의하면 크기 5 벡터 (0 값)가 만들어지고 홀수 색인 (3 개가 있음) 셀이 선택됩니다. 1:-4:-7은 다섯 개가 아닌 세 개의 값을 만듭니다. 마지막으로 선택한 세 가지 세포에서 오는 3 개 값의 데이터로 가득 1:-4:-7

+0

좋아, 그래서 나는 'a (1 : 2 : 5)'와 '1 : -4 : -7'을 조심해야한다. 첫 번째 표현식은 다섯 개의 요소를 만들고, 두 번째 표현식은 세 개의 요소를 만들고, 세 개의 요소를 결합하면 홀수/공백 요소에 벡터'a'가 인쇄됩니다. 도움을 주셔서 감사합니다. 내 질문에 대한 추가 정보를 어디서 찾을 수 있는지 조언 해 주시겠습니까? 웹을 검색 할 때 관련 정보를 찾을 수 없습니다. 지원해 주셔서 감사합니다. – johnhenning

+0

문제가 해결된다고 생각되면 답을 수락하십시오. 1 : 2 : 5는 MATLAB 명령 행에만 쓰는 경우 실제로 3 개의 값을 만듭니다. (1 : 2 : 5) 상황에서처럼 벡터를 인덱싱하는 데 사용하면 트릭이됩니다. 그 중 3 개를 선택하십시오. –