영상처리/OpenCV

ndarray 클래스 - N차원 배열

성혜영 2022. 6. 7. 13:48

ndarray class : 동일한 자료형을 가진 값들이 행렬 형태로 N차원 배열 생성

스스로 자료형을 유추하여 자동 할당

리스트나 튜플 또는 ndarray 클래스 등을 중첩하여 배열 생성 가능

 

np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

<array 함수 정의>

 

object : 입력된 개체의 형태와 동일한 배열 구조로 Numpy 배열 정의

 

dtype : 배열의 자료형. 가령 object가 0과1로 구성된 배열일경우 값을 유추하여 int32형태 numpy 배열 생성. bool로 지정할 경우 True와 False 값으로 생성.

 

copy : 객체를 복사하여 생성할지 선택. False로 지정하면 자료형이나 순서 등을 고려해서 객체를 복사할지 선택. 자료형이나 형태가 다르다면 false여도 객체를 복사하여 생성.

 

order : 배열의 메모리 레이아웃 설정. 크게 C스타일과 Fortran 스타일의 메모리 레이아웃이 있음.

->  C 스타일의 메모리 순서 : 다차원 배열은 가장 빠르게 변화하는 색인의 순서로 할당. [i][j][k] 형태로 색인이 구성되었을 경우 k의 값부터 순차적으로 증가, 뒤의 배열 색인이 최댓값에 도달하면 그앞의 색인이 증가. 행을 먼저 순차적으로 저장

 

 -> Fortran 스타일의 메모리 순서 : C와 반대로 i 값부터 순차 증가, 앞의 배열 색인이 최대값에 도달하면 그 뒤의 색인이 증가. 열을 먼저 순차적으로 저장

 

subok : 하위 클래스에서 배열 생성 여부를 나타냄. True일 경우 하위 클래스에 전달, False일 경우 반환된 배열은 ndarray 클래스가 됨.

 

ndmin : 반환된 배열의 최소 차원 수. 입력된 객체가 1차원 배열일 때 ndmin이 3이라면 3차원 배열로 생성. [1,2,3] -> [[[1,2,3]]]

 

order copy=False copy=True
‘K’ 레이아웃에 최대한 일치  
‘A’ Fortran에 근접할 경우 F order, 아닐경우 C order  
‘C’ C order C order
‘F’ Fortran order Fortran order

<array의 메모리 레이아웃 설정>

 

import numpy as np



array1 = np.array([[1,2,3], [4,5,6]])

array2 = np.array([1,2,3], dtype=complex, ndmin=3)

array3 = np.array(array1, copy=False)

array4 = np.array(np.mat('1 2 ; 3 4'), subok=True)



array1[0] = [4,5,6]



print(array1)

print(array2)

print(array3)

print(type(array4))

<Numpy 배열 생성>

[[4 5 6][4 5 6]]

[[[1.+0.j 2.+0.j 3.+0.j]]]

[[4 5 6][4 5 6]]

<class 'numpy.matrix'>

 

array1 : 리스트를 통해 기본적인 2차원 배열 생성

array2 : dtype과 ndmin을 할당하여 복소수 형태의 3차원 배열 생성

array3 : copy를 False로 지정해 array1 참조. 결과값이 할당된 이후에 array1의 값을 변경했지만 배열을 복제하지 않아 array1의 값을 그대로 가짐

array4 : mat() 함수로 하위 클래스로서 ndarray 클래스가 아닌 matrix 클래스 사용

-> matrix 클래스는 입력된 배열을 행렬로 인식. 

 

'영상처리 > OpenCV' 카테고리의 다른 글

배열 병합 및 분리  (0) 2022.06.07
배열 차원 변형  (0) 2022.06.07
배열의 블록 단위 요소에 접근  (0) 2022.06.07
배열의 개별 단위 요소에 접근 방법  (0) 2022.06.07
OpenCV 이론  (0) 2022.06.07