2015년 4월 24일 금요일

[00082] numpy.ndarray 의 필드(field, 내부변수)

  numpy를 이용해 생성된 ndarray객체는 다양한 field와 method를 갖고 있다. ndarray객체의 field/method는 dot(.)연산자를 이용하여 접근할 수 있다. (마치 C언어의 구조체나 공용체의 필드에 접근하는 방식과 같다.)

배열의 모양에 관련된 attribute 들

먼저, 전치행렬을 구해주는 T attribute가 있다.

-------------------------------------------------------------------------
>>> x = np.array([[1.,2.],[3.,4.]])

>>> x
array([[ 1., 2.],
[ 3., 4.]])
>>> x.T
array([[ 1., 3.],
[ 2., 4.]])
>>> x = np.array([1.,2.,3.,4.])
>>> x
array([ 1., 2., 3., 4.])
>>> x.T # 1차원 배열에서 T attribute 는 동작하지 않는다.
array([ 1., 2., 3., 4.])
-------------------------------------------------------------------------

위에서도 언급되었지만 1차 배열에서는 이것이 동작되지 않는다는 것을 주의해야 한다. 만약 배열 A의 복소전치행렬을 구하고 싶다면 A.conj().T (혹은 A.T.conj() ) 라고 하면 된다. 그리고 M이 행렬객체라면 단순히 M.H 라고 하면된다.

배열의 크기에 관련된 attribute 들

  배열의 크기에 관련된 attribute로 ndim, shape, 그리고 size가 있다. 이 중 shape는 읽기뿐만 아니라 쓰기도 가능하다.

  ndim 은 배열이 몇 차 배열인지를 알려준다.


-------------------------------------------------------------------------
>>> x = np.array([1, 2, 3])
>>> x.ndim
1
>>> y = np.zeros((2, 3, 4))
>>> y.ndim
3
-------------------------------------------------------------------------

shape는 배열의 각 차수별 크기를 튜플로 반환하거나 지정해 줄 수 있다. 단, shape를 변경할 때는 변경 전과 전체 요소의 숫자가 같아야 한다.

-------------------------------------------------------------------------
>>> x = np.array([1, 2, 3, 4])
>>> x.shape
(4,)
>>> y = np.zeros((2, 3, 4))
>>> y.shape
(2, 3, 4)
>>> y.shape = (3, 8)
>>> y
array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.]])
>>> y.shape = (3, 6)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
ValueError: total size of new array must be unchanged
-------------------------------------------------------------------------

size는 전체 요소들의 개수를 반환하며 np.prod(obj.shape)와 같은 결과를 생성한다.

-------------------------------------------------------------------------
>>> x = np.zeros((3, 5, 2), dtype=np.complex128)
>>> x.size
30
>>> np.prod(x.shape)
30
-------------------------------------------------------------------------

기타

나머지 attribute 들은 다음 표에 정리하였다.

TSame as self.transpose(), except that self is returned if self.ndim < 2.
data
배열의 시작을 가리키는 파이썬 버퍼 객체 
dtype
배열 요소의 데이터형 
flags
배열의 메모리 구조에 대한 정보 
flat
배열의 1차원 반복자 
imag배열의 허수부
real배열의 실수부
size배열의 요소 전체의 개수
itemsize배열 요소의 바이트 크기
nbytes배열의 전체 요소가 차지하는 바이트 크기
ndim배열의 차수
shape배열의 차수별 크기.
stridesTuple of bytes to step in each dimension when traversing an array.
ctypesAn object to simplify the interaction of the array with the ctypes module.
baseBase object if memory is from some other object.
[#00082]

댓글 없음:

댓글 쓰기