개발/매트랩

[매트랩] 논리 인덱싱(logical indexing)

섭교수 2023. 12. 29. 08:00
반응형

#매트랩

v = [-1 2 3 -4 5 -6 -7 -8 9 10 -11 12 -13 14 -15 16 -17 18 19 20]

이라는 배열에서 양수 요소만 추출하는 방법은 일반적인 프로그래밍 언어에서 반복문과 조건문으로 수행된다

 
v = [-1 2 3 -4 5 -6 -7 -8 9 10 -11 12 -13 14 -15 16 -17 18 19 20];
w = [];
j = 0;
for i = 1:length(v)
	if v(i) > 0
	j = j+1;
	w(j) = v(i);
	i = i+1;
	end
end

 

매트랩에서는 논리 인덱싱라는 기능을 사용해 더욱 간단하게 코드를 작성할 수 있다.

 

v = [-1 2 3 -4 5 -6 -7 -8 9 10 -11 12 -13 14 -15 16 -17 18 19 20];
w = [];
w = v(v>0);

 

 

논리 인덱싱이란 논리값으로 이루어진 배열을 사용한 인덱싱을 말한다

문자나 배열에 조건을 입력하면 논리값으로 이루어진 배열이 반환된다

앞서 살펴본 예제에서 사용된 v>0은 다음과 같은 결과를 출력한다.

 

 

 

이것을 인덱스에 넣게 되면 1인 자리의 인덱스만 입력된다. 즉

2 3 5 9 10 12 14 16 18 19 20 의 인덱스만 추출된다는 것

논리 인덱싱은 다시말해 인덱스 자리에 조건을 입력해 참이 되도록 하는 인덱스를 불러오는 기능이다

이때 logical 배열에서 0인 요소는 포함이 되지 않고 참인 것들만 포함된다

 

 

 

 

응용1

만약 행렬에 대해 논리 인덱싱을 사용하는 경우

logical 행렬이 출력된다

하지만 이를 인덱스로 활용하게 되면 열벡터가 출력된다

매트랩에서는 인덱스를 1열1행 = 1, 1열 2행 = 2, 1열 3행 = 3, 2열 1행 = 4 와 같은 방식으로도 구성하기 때문이다

예를들어 위 행렬에 대해 a(4)를 입력하면 2열 1행의 요소가 출력된다

 

 

응용2

다른 변수를 선언하지 않고 바로 조건에 해당하는 값을 업데이트 할 수 있다

두 행렬의 크기를 비교해 큰 값만 가지도록 행렬 A 업데이트하기

반응형