MATLAB

MATLAB 행렬에서 특정 열 벡터 또는 행 벡터 존재 여부 확인하기

qlsenddl 2021. 5. 24. 19:35
728x90

 어떤 행렬(matrix)에 특정한 열 벡터(column vector) 또는 행 벡터(row vector)가 있는지 확인하는 방법이다. 관련해서 MATLAB 함수가 있는 줄 알았는데, 딱히 없는 것 같아서 정리해봤다. for 문을 써서 행렬의 행이나 열을 직접 인덱싱(indexing)해서 확인할 수도 있지만, 행렬의 크기가 매우 크거나 이런 작업을 반복적으로 수행해야 할 경우, 비효율적이므로 해당 방법을 추천한다.

 사용 예시: 어떤 dataset을 m x n 행렬로 표현할 때, data 개수(sample 수) x data의 차원(dimension) 형태로 저장하는 경우가 있다. 이 때 해당 dataset을 나타내는 행렬 내에 어떤 data(1 x n vector)가 있는지를 확인할 필요가 있을 수 있다.

 

1. 특정 열 벡터 존재 여부 확인

min(sum(abs(A-b))): 행렬 A가 열 벡터 b를 포함하면 0, 아니면 양수

ex: 

행렬 A가 열 벡터 b를 포함하는 경우
행렬 A가 열 벡터 b를 포함하지 않는 경우

 

2. 특정 행 벡터 존재 여부 확인

min(sum(abs(A-b), 2)): 행렬 A가 행 벡터 b를 포함하면 0, 아니면 양수

ex:

행렬 A가 행 벡터 b를 포함하는 경우
행렬 A가 행 벡터 b를 포함하지 않는 경우

3. 설명

 행렬 A가 행/열 벡터 b를 포함하는 경우 abs(A-b)를 했을 때에 모든 행 또는 열이 0인 구간이 존재한다. 그러므로 행/열끼리 더한 경우 0이 존재할 것이고, 'A-b'의 절댓값을 취했기 때문에 0이 아니면 모두 양수가 됐을 것이다. 그러므로 더한 값에 min을 취하면 0이 존재하게 된다. 만약 min을 취한 값이 0이 아니라면 모든 행 또는 열이 0인 구간이 존재하지 않는다는 뜻이고, 이는 행렬 A가 행/열 벡터 b를 포함하지 않는다는 의미가 된다.

728x90