본문 바로가기
파이썬 (Python)/Numpy

Python 파이썬 numpy 함수 any, all, where, 행렬 인덱싱(index)과 슬라이싱

by ★√★ 2021. 2. 25.

안녕하세요, 오늘 포스팅한 내용은 numpy 함수 중 any, all, where 함수 그리고 numpy 행렬 인덱싱(index)와 슬라이싱에 대한 내용입니다. 수계산에 정말 많이 쓰이는 함수입니다. 

numpy 함수 any, all, where, 행렬 인덱싱(index)과 슬라이싱 썸네일

1. any, all, where 함수 

 

1) any 함수

   : numpy의 내장함수로서, 행렬 값이, 하나라도 조건 값에 부합하면, 참을 출력하는 함수 입니다. 

     기본 구문은 아래와 같습니다. 

   ->  np.any(조건 값)

 

===============================================================

import numpy as np

test01 = np.arange(10).reshape(2,5)

np.any(test01> 3)

===============================================================

 

- 위에 코드를 실행 시켜 보면, 조건(3 보다 큰게 있냐?!) 에, 하나라도, 부합하게 되면, "True"를 출력하는 걸 확인 하실 수 있습니다. (0~9 니까, 3보다 큰 수는 4,5,6,7,8,9 이렇게 있으니까, True 입니다.)

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

 

2) all 함수

   : numpy의 내장함수로서, 행렬 값이, 모두 조건 값에 부합하면, 참을 출력하는 함수 입니다. 

     기본 구문은 아래와 같습니다. 

   ->  np.all(조건 값)

 

===============================================================

import numpy as np

test01 = np.arange(10).reshape(2,5)

np.all(test01>-1)

===============================================================

 

- 위에 코드를 실행 시켜 보면, 조건(-1 보다 크냐?!) 에 모든 행렬 값이 부합하면, "True"를 출력하는 걸 확인 하실 수 있습니다.

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

3) where 함수

   : numpy의 내장함수로서, 행렬 값이, 조건 값 해당하는 값만 출력을 하는 함수 입니다. 

     기본 구문은 아래와 같습니다. 

   ->  np.where (조건 값)

 

====================================================================

import numpy as np

test01 = np.arange(10).reshape(2,5)

np.where(test01 > 5, test01, 0)     # 조건에 해당하는 것은 그 값을 출력을 하는거고, 아니면 0으로 출력

np.where(test01 > 5, test01, 1)    # 조건에 해당하는 것은 그 값을 출력을 하는거고, 아니면 1으로 출력

np.where(z > 0, z, 0)

====================================================================

 

- 위에 코드를 실행 시켜 보면, 조건에 해당하는 것은 그 값을 출력을 하는거고, 아니면 0 or 1로 채워 넣어라는 구문이 실행되는 걸 확인 하실 수 있습니다.

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

2. numpy 행렬 인덱싱(index)와 슬라이싱 

 

: 인덱스로 값을 출력하는 방법과, 슬라이싱을 이용하여 출력하는 방법을 서로 비교하면서 설명 드리도록 하겠습니다. 

  가장 큰 차이는, 인덱스는 그 한 값을 출력하는것이고, 슬라이싱은 그 범위를 지정하여 출력하는 것입니다. 

  그리고, 그로 인해, 인덱스는 그 값을 출력하니까, 한 행렬이 줄어든 상태에서, 출력이 되고, 슬라이싱은 줄어들지 않고,

  그대로 출력이 됩니다. 아래 예제 구문 참조 부탁 드립니다.

 

Case #1 인덱싱(index)로 출력하는 방법

 

====================================================================

import numpy as np

test01 = np.arange(125).reshape(5,5,5) 

test01[0]  # 인덱싱을 하게 되면 한 차원이 줄은 상태에서, 출력

====================================================================

 

- 위 코드를 실행 시켜 보면, 아래와 같이, [0] 의 인덱스에 위치해 있는 값이 출력되는 걸 확인 하 실 수 있습니다. 하지만, 행렬이 줄어든 상태에서 출력되는 걸 확인 하실 수 있습니다.

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

Case #2 슬라이싱으로, 출력하는 방법

 

====================================================================

import numpy as np

test01 = np.arange(125).reshape(5,5,5)

test01[:]  # 슬라이싱은 행렬을 유지하면서 범위 내용을 출력.

====================================================================

 

- 위 코드를 실행 시켜 보면, 아래와 같이, 전체 행렬을 출력이 되는 걸 알 수 있고, 행렬을 유지되는 것도 확인 하실 수 있습니다. 

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

3. linalg 서브모듈 (np.linalg.inv , np.linalg.solve)

 

 

1) np.linalg.inv
: inverse 라는 단어를 보시고, 눈치 채셨겠지만, 역행렬을 구하는 함수입니다. 중학교 때인지, 고등학교 때 인지는 모르겠지만, 그 때 배웠던 그 역행열입니다. 기본 구문은 아래와 같습니다.

 -> np.linalg.inv(역행렬 변환하고 싶은 행렬 변수)

 

더 쉬운 이해를 돕기 위해서, 간단하게, 예문을 통해서 설명드리겠습니다.

 

============================================================================

import numpy as np

reverse01 = np.random.rand(3,3)

print(np.linalg.inv(reverse01))

 

============================================================================

 

위 코드를 실행을 해보면, 아래와 같은 결과를 보실 수 있습니다. 즉, reserse01의 역행렬을 보실 수 있습니다. 

 

 

numpy 함수 구현 코드 및 결과 사진

 

 

2) np.linalg.solve 선형대수식

 : 선형대수학이라고 하면, 좀 이질적으로 들리시겠지만, 우리가 중, 고등학교에서 해 구할 때 썼던 공식입니다. 기본 코드는 아래와 같습니다. 

-> np.linalg.solve(수식 왼쪽 행렬, 수식 오른쪽 행렬)

 

위 기본 구문으로는 이해가 안되실 수 있으니까, 아래와 예문을 통해서, 설명 드리도록 하겠습니다. 수학공식으로 표현하면 아래와 같습니다. 

 

 

numpy 함수 구현 코드 및 결과 사진

 

============================================================================

import numpy as np

test01 = np.array([[5,3],[1,3]])                       # 왼쪽 행렬

test02 = np.array([20,4])                             # 오른쪽 행렬

result01 = np.linalg.solve(test01,test02)         # 해를 구하는 코드

print (result01)

============================================================================

 

위 코드를 실행을 해보면, 아래와 같은 결과를 보실 수 있습니다. 즉, x, y의 해를 구해줍니다. 그럼 저희 학창시절에, 여기에서 끝나지 않았죠. 검산을 해보는 거죠. 검산하는 식도 아래 설명 드리겠습니다.

 

 

numpy 함수 구현 코드 및 결과 사진

 

-> 검산하는 코드 :  np.allclose(test01@result01,test02)

아래와 같이 해가 정확하게 나왔기 때문에, "True" 값을 출력을 해줍니다.

 

numpy 함수 구현 코드 및 결과 사진

 

이상입니다. 이번 포스팅에서는 numpy 함수 중 any, all, where 함수 그리고 numpy 행렬 인덱싱(index)와 슬라이싱에 대한 내용을 다뤄봤습니다. 이것 저것 하는데 복습안하니까 다 까먹더라구요. 중간 중간 틈틈히 복습해야 될 거 같습니다. 그럼 이만 마무리 하도록 하겠습니다. 감사합니다.

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.


[저작권이나권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다검토  수정  삭제 조치 하도록 하겠습니다그리고기재되는 내용은 개인적으로 습득한 내용이므로 오류가 발생할  있을 가능성이 있으므로기재된 내용은 참조용으로만 봐주시길 바랍니다게시물에오류가 있을때도, Comment 달아 주시면검증 결과를 통해수정하도록 하겠습니다.]

728x90

댓글