본문 바로가기
Programming/python

[Numpy] ndarray 연산

by 유주원 2015. 3. 12.

ndarray 연산

ndarray는 아래와 같은 방법으로 연산이 가능하다. ndarray에서의 연산은 for문 연산이 아니기 때문에 일괄처리가 가능하다.



ndarray 슬라이싱

ndarray도 python 문자열이나 list 처럼 슬라이싱이 가능하다.

아래의 그림을 보면 0부터 9까지 저장되어 있는 1차원 배열 형태의 ndarray를 만들었고, 처음부터 5번째 까지만

슬라이싱 하도록 되어 있다.


리스트 슬라이싱과의 중요한 차이점은 리스트의 경우에는 슬라이싱을 할 경우 데이터 복사가 이루어지지만 

ndarray 슬라이싱의 경우는 원본 배열은 그대로 저장되어 있고 사용자에게 보여주는 뷰만 다른 형태로 보여주는

것이기 때문에 데이터 복사가 이루어 지지 않는다. (데이터 베이스의 뷰 테이블과 비슷한 개념)


뷰 형태로 보여지더라도 해당 값은 그대로 참조하고 있기 때문에 만약 여기서 arr[:5] = 1 이라고 입력하면

arr의 배열 값이 변경되어 array([1,1,1,1,1,5,6,7,8,9]) 로 바뀌어질 것이다.


참조가 아닌 새로운 배열의 값을 가지고 싶다면 arr[:5].copy() 함수를 사용하면 새로운 배열이 만들어 진다.



아래 그림과 같이 다차원 배열의 슬라이싱도 가능하다.



ndarray 색인

1차원 배열에서의 색인은 리스트 색인과 비슷하다.



다차원 배열에서의 색인 결과는 1차원 배열 형태로 리턴된다. 만약 개별 원소 하나의 값을 얻고자 한다면 해당 원소의

index를 명확하게 넘겨주어야 한다. 





불리언 색인

name이라는 사람 이름을 가지고 있는 배열이 있다고 가정할 때, 어떤 조건을 걸게 되면 각 원소들을 해당 조건과

비교하여 True, False를 리턴하게 된다.



이렇게 리턴되는 불리언 배열을 색인으로 사용할 수가 있다.

아래의 그림을 보면 6X5의 랜덤 배열을 생성하였고 name=='Bob'라는 조건을 주어서 해당 위치가 True인 결과 값만

리턴하도록 나타내고 있다.



불리언 색인시에는 색인하고자 하는 배열의 열이 조건 열과 동일해야만 한다.

또한 불리언 색인을 이용하여 반환된 배열은 데이터 복사가 이루어진다는 것을 명심하자.



팬시 색인

원하는 배열의 순서로 결과를 확인하고 싶을 경우에 팬시 색인을 사용한다. 

아래의 그림을 보면 arr의 색인 값으로 순서 리스트를 넘기고 있는데, 이 순서 리스트대로 행이 결과로 나타나게 된다.



팬시 색인은 데이터 복사가 이루어진다.


ndarray 축 바꾸기

T라는 속성값을 이용하면 배열의 축을 변경할 수 있다.



배열 축을 바꾸더라도 데이터 복사로 인해 배열이 새로 생기는 것이 아니라 단지 뷰의 형태만 바뀌게 된다.