numpy — numpy 호환 배열 연산¶
ulab 의 numpy 서브모듈은 ndarray n차원 배열 타입을 중심으로 구축된 numpy 호환 API를 제공합니다. CPython의 numpy 중에서 엄선된 일부를 구현합니다: 배열 생성, 요소별 수학 연산, 축소(reduction) 및 통계, 선형 대수, FFT, 난수 생성, 다항식 피팅, 그리고 기본 I/O.
이 서브모듈은 관례적으로 np 로 임포트합니다:
from ulab import numpy as np
a = np.array([1, 2, 3, 4], dtype=np.float)
b = np.linspace(0, 1, num=5)
c = np.dot(a.reshape((2, 2)), a.reshape((2, 2)))
각 dtype 인자는 모듈 레벨에서 노출되는 정수 상수 중 하나입니다: numpy.bool, numpy.uint8, numpy.int8, numpy.uint16, numpy.int16, numpy.float(기본값), 그리고 (복소수 지원이 컴파일된 경우) numpy.complex. 결과 타입 ndarray 는 numpy.ndarray 를 가리킵니다.
서브모듈¶
class ndarray — n차원 배열¶
ndarray 는 numpy / ulab 의 핵심을 이루는 n차원, dtype 인식 컨테이너입니다. 데이터는 연속된 블록에 저장되며, 그 해석은 작은 헤더(dtype, shape, strides, ndim, itemsize)로 기술됩니다. reshape, transpose, 슬라이싱 같은 많은 연산은 이 헤더만 조정하므로 매우 저렴합니다. 반면 새 저장 공간을 할당하는 메서드(copy, flatten, 대부분의 산술 연산)는 새로운 밀집 배열을 반환합니다.
동일한 타입에 ulab.ndarray, numpy.ndarray, 그리고 (이 페이지 내에서는) 간단히 ndarray 로 접근할 수 있습니다.
- class numpy.ndarray(values: ndarray | bytes | list | tuple, *, dtype: int = numpy.float)¶
새
ndarray를 생성합니다.- 매개변수:
values – 소스 데이터. 다른
ndarray(dtype이 다르면 타입 변환과 함께 깊은 복사됨)이거나 임의의 MicroPython 이터러블입니다. 중첩 이터러블은 다차원 배열을 생성하며, 내부 이터러블은 모두 같은 길이여야 합니다. 그렇지 않으면ValueError가 발생합니다.dtype – 새 배열의 요소 타입.
numpy가 노출하는 타입 코드 정수(numpy.bool,numpy.uint8,numpy.int8,numpy.uint16,numpy.int16,numpy.float, 그리고 지원되는 경우numpy.complex) 중 하나이거나dtype인스턴스입니다. 기본값은numpy.float입니다.
팩토리 함수
numpy.array는ndarray를 생성하는 관례적인 방법으로, 이 생성자로 전달됩니다.- byteswap(*, inplace: bool = False) ndarray¶
모든 요소의 바이트 순서를 교환합니다.
uint16,int16,float,complex배열의 경우 요소별 바이트 순서를 뒤집는데, 이는 엔디언이 마이크로컨트롤러와 일치하지 않는 주변장치에서 데이터를 가져올 때 유용합니다. 단일 바이트 dtype(bool,uint8,int8)의 경우 이는 아무 동작도 하지 않으며 뷰 또는 복사본을 반환합니다.inplace가False(기본값)이면 새ndarray가 반환되고 원본은 그대로 유지됩니다.inplace가True이면self의 바이트가 제자리에서 교환되고self의 뷰가 반환됩니다.
- flatten(*, order: str = 'C') ndarray¶
배열의 새로운 1차원 복사본을 반환합니다.
- 매개변수:
order –
'C'(기본값)는 C 순서(마지막 축이 가장 빠르게 변함)로 데이터를 순회합니다.'F'는 Fortran 순서(첫 번째 축이 가장 빠르게 변함)로 순회합니다.
- reshape(shape: int | tuple[int, ...]) ndarray¶
새로운 shape를 가진 배열의 뷰를 반환합니다. 전체 요소 개수는 변하지 않아야 하며, 그렇지 않으면
ValueError가 발생합니다.ULAB_MAX_DIMS > 1일 때만 사용할 수 있습니다.shape에 할당하는 것과 동등합니다.
- sort(*, axis: int | None = -1) None¶
배열을 제자리에서 정렬합니다.
- 매개변수:
axis – 정렬을 수행할 축.
-1(기본값)은 마지막 축을 따라 정렬합니다.None은 먼저 배열을 평탄화한 다음 정렬합니다.
- tobytes() bytearray¶
배열의 기반 데이터 버퍼를 별칭으로 가리키는
bytearray를 반환합니다. 반환된bytearray를 통한 쓰기는 배열을 제자리에서 수정합니다. 배열이 밀집되어 있지 않으면(예: 슬라이스된 뷰)ValueError가 발생합니다.
- transpose() ndarray¶
배열의 전치(축 역순)를 반환합니다. 1차원 배열의 경우
self를 반환합니다.ULAB_MAX_DIMS > 1일 때만 사용할 수 있습니다.T속성은 이 메서드의 약식 표현입니다.
- dtype: dtype | int¶
배열 요소의 데이터 타입. 펌웨어가
ULAB_HAS_DTYPE_OBJECT가 활성화된 상태로 빌드된 경우dtype인스턴스를 반환하고, 그렇지 않으면 기반 단일 문자 타입 코드를 정수로 반환합니다.
- T: ndarray¶
배열의 전치.
transpose()와 동등합니다.
지원되는 연산자¶
ndarray 인스턴스는 다음 연산자를 지원합니다. 이항 연산자는 표준 numpy 브로드캐스팅 규칙에 따라 피연산자를 브로드캐스트하고, numpy의 업캐스팅 규칙을 따릅니다(예: uint8 + int8 => int16, uint16 + int16 => float). 복소수 피연산자가 포함된 연산은 복소수 결과를 생성합니다.
산술(이항): +, -, *, /, //, %, **. 반사된(우측) 피연산자와 제자리 변형 +=, -=, *=, /=, %=, **= 도 지원됩니다. ndarray-ndarray 와 ndarray-스칼라 형태가 모두 허용됩니다. 바닥 나눗셈(//)과 나머지 연산자(%)는 complex 배열에 대해서는 구현되어 있지 않습니다.
비교: ==, !=, <, <=, >, >=. 각각 브로드캐스트 shape의 불리언 ndarray 를 반환합니다.
비트 연산(정수 배열만): &, |, ^. 이를 float 또는 complex 배열에 적용하면 TypeError 가 발생합니다.
단항: +(복사본 반환), -(부정; 부호 없는 dtype에서는 값이 \(2^N\) 으로 모듈로 래핑됨), abs()(요소별 절댓값; 부호 없는 dtype에서는 계산 없이 복사본 반환), ~(비트 반전, 정수 dtype만), len()(첫 번째 축의 길이 반환).
인덱싱 및 슬라이싱: a[i], a[i, j, ...], a[start:stop:step], 불리언 마스크 인덱싱(a[mask]), 정수 배열(팬시) 인덱싱이 모두 읽기와 쓰기 양쪽에서 지원됩니다.
반복: ndarray 를 순회하면 첫 번째 축을 따라 하위 배열을 산출합니다(1차원 배열의 경우 한 번에 하나의 요소). 차원에 관계없이 모든 스칼라 요소를 순회하려면 flat 을 사용하세요.
행렬 곱셈 연산자 @ 는 구현되어 있지 않습니다. 대신 numpy.dot(np.dot(a, b))을 사용하세요.
시프트(<<, >>) 연산자는 연산자 수준에서 구현되어 있지 않습니다. 요소별 정수 시프트에는 numpy.left_shift 와 numpy.right_shift 를 사용하세요.
배열 생성¶
- numpy.array(values: ndarray | list | tuple, *, dtype: int = float) ndarray¶
숫자의 중첩 이터러블로부터 새
ndarray를 생성합니다.numpy.ndarray의 동등한 대체 생성자입니다.
- numpy.arange(start: int | float, stop: int | float | None = None, step: int | float = 1, *, dtype: int | None = None) ndarray¶
반개구간
[start, stop)에 걸쳐 균등 간격의 값을 반환합니다. 위치 인자가 하나만 주어지면start = 0인stop으로 취급됩니다. dtype 이 생략되면 입력에서 추론됩니다(start, stop, step 이 모두 정수이고 범위 내에 있으면 정수).
- numpy.asarray(a: ndarray | list | tuple, *, dtype: int | None = None) ndarray¶
a 가 이미 dtype이 dtype 과 일치하는(또는 dtype 이
None인)ndarray이면 a 를 변경 없이 반환합니다. 그렇지 않으면 (주어진 경우 요청된 dtype 변환과 함께) 새 배열을 생성합니다. 이터러블은numpy.array에서와 같이 변환됩니다.
- numpy.concatenate(arrays: tuple, *, axis: int = 0) ndarray¶
기존 axis 를 따라
ndarray의 시퀀스를 결합합니다. 모든 입력 배열은 axis 를 제외한 모든 축에서 같은 dtype, ndim, shape를 공유해야 합니다.
- numpy.diag(a: ndarray, *, k: int = 0) ndarray¶
2차원 a 의 경우 k 번째 대각선을 담은 1차원 배열을 반환합니다. 1차원 a 의 경우 a 가 k 번째 대각선에 배치된 2차원 정사각 배열을 반환합니다. k 는 양수(주 대각선 위) 또는 음수(아래)일 수 있습니다.
- numpy.empty(shape: int | tuple[int, ...], *, dtype: int = float) ndarray¶
zeros의 별칭으로, shape 와 dtype 의 0으로 채워진 배열을 반환합니다. (ulab은 버퍼를 초기화되지 않은 상태로 두지 않습니다.)
- numpy.eye(N: int, M: int | None = None, k: int = 0, *, dtype: int = float) ndarray¶
k 번째 대각선에 1이 있고 그 외에는 0인 2차원 N x M 배열(M 이
None이면 정사각 N x N)을 반환합니다.
- numpy.frombuffer(buffer: bytes, *, dtype: int = float, count: int = -1, offset: int = 0) ndarray¶
버퍼 프로토콜 객체를 dtype 의 1차원
ndarray로 해석합니다. count 는 읽을 항목 수입니다(-1은 사용 가능한 모든 항목을 읽음). offset 은 버퍼 시작에서 그만큼의 바이트를 건너뜁니다.
- numpy.full(shape: int | tuple[int, ...], fill_value: int | float | bool, *, dtype: int = float) ndarray¶
모든 요소가 fill_value 로 설정된 shape 와 dtype 의 새 배열을 반환합니다.
- numpy.linspace(start: float, stop: float, num: int = 50, *, endpoint: bool = True, retstep: bool = False, dtype: int = float) ndarray | tuple[ndarray, float]¶
닫힌 구간
[start, stop](또는 endpoint 가False이면 반개구간)에 걸쳐 num 개의 균등 간격 샘플을 반환합니다. retstep 이True이면 튜플(samples, step)을 반환합니다. 복소수 start/stop 은 복소수 배열을 생성합니다(복소수 지원이 활성화된 경우).
- numpy.logspace(start: float, stop: float, num: int = 50, *, base: float = 10.0, endpoint: bool = True, dtype: int = float) ndarray¶
로그 스케일에서 균등 간격으로 배치된 num 개의 샘플을 반환합니다: 결과는
base ** start에서 시작하여base ** stop에서 끝납니다.
- numpy.meshgrid(*xi: ndarray, indexing: str = 'xy') tuple[ndarray, ...]¶
1차원 좌표 배열의 시퀀스로부터 좌표 행렬의 튜플을 반환합니다. indexing 이
'xy'(기본값)이면 처음 두 입력이 데카르트 좌표로 취급되고 출력 축이 교환됩니다.'ij'이면 행렬 스타일 인덱싱이 사용됩니다. 이 구현은copy=True및sparse=False인 NumPy의 동등 기능에 해당합니다.
검사 / 출력¶
비교¶
- numpy.clip(a: ndarray | int | float, a_min: ndarray | int | float, a_max: ndarray | int | float) ndarray | int | float¶
a 의 값을
a_min <= result <= a_max가 되도록 클리핑합니다.maximum(a_min, minimum(a, a_max))와 동등하며, 브로드캐스팅은minimum과 같은 규칙을 따릅니다.
- numpy.equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
요소별
x1 == x2; 불리언ndarray(또는 두 입력이 모두 스칼라이면bool스칼라)를 반환합니다. 이식성을 위해 제공됩니다 – 배열에 대한==연산자도 같은 결과를 제공합니다.
- numpy.not_equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
요소별
x1 != x2;equal의 불리언 대응 함수입니다.
- numpy.isfinite(x: ndarray | int | float) ndarray | bool¶
입력이 유한한 곳에서
True인 불리언 배열(또는 스칼라)을 반환합니다. 정수 입력은 항상 유한합니다.
- numpy.isinf(x: ndarray | int | float) ndarray | bool¶
입력이 무한한 곳에서
True인 불리언 배열(또는 스칼라)을 반환합니다. 정수 입력은 결코 무한하지 않습니다.
- numpy.maximum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
두 배열 / 스칼라의 요소별 최댓값. 인자는 함께 브로드캐스트됩니다. dtype이 다르면 출력은 업캐스트됩니다.
- numpy.minimum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
두 배열 / 스칼라의 요소별 최솟값;
maximum의 대응 함수입니다.
수치 축소¶
- numpy.all(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
axis 를 따라 모든 요소가
True로 평가되는지 검사합니다.axis=None(기본값)이면 평탄화된 배열이 검사되고 단일bool이 반환됩니다.
- numpy.any(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
axis 를 따라 어떤 요소라도
True로 평가되는지 검사합니다.axis=None이면 평탄화된 배열이 검사됩니다.
- numpy.argmax(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
axis 를 따른 최대 요소의 인덱스를 반환합니다.
axis=None이면 배열이 평탄화되고 단일 정수가 반환됩니다.
- numpy.argmin(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
axis 를 따른 최소 요소의 인덱스를 반환합니다.
axis=None이면 배열이 평탄화되고 단일 정수가 반환됩니다.
- numpy.argsort(a: ndarray, *, axis: int = -1) ndarray¶
axis 를 따라 a 를 오름차순으로 정렬하는 부호 없는 정수 인덱스
ndarray를 반환합니다. 출력 dtype은uint16이므로 어떤 축도 65535개 요소를 초과할 수 없습니다.axis=None은 지원되지 않습니다.
- numpy.diff(a: ndarray, *, n: int = 1, axis: int = -1) ndarray¶
axis 를 따른 a 의 n 차 이산 전방 차분을 반환합니다. n 은
0..9범위여야 합니다(미분 스텐실은int8에 저장됨). axis 의 길이는 n 만큼 줄어듭니다. numpy의prepend와append키워드는 구현되어 있지 않습니다.
- numpy.flip(a: ndarray, *, axis: int | None = None) ndarray¶
axis 를 따라 요소 순서가 역순으로 된 새 배열을 반환합니다.
axis=None이면 배열이 모든 축을 따라 역순으로 됩니다.
- numpy.max(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
axis 를 따른 최대 요소를 반환합니다.
axis=None(기본값)이면 평탄화된 배열이 스칼라로 축소됩니다. numpy의out키워드는 구현되어 있지 않습니다.
- numpy.min(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
axis 를 따른 최소 요소를 반환합니다;
max의 대응 함수입니다.
- numpy.mean(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | float¶
axis 를 따른 산술 평균을 반환합니다.
axis=None(기본값)이면 평탄화된 배열의 평균이float로 반환됩니다.
- numpy.median(a: ndarray, *, axis: int | None = None) ndarray | float¶
axis 를 따른 중앙값을 반환합니다.
axis=None이면 배열이 먼저 평탄화됩니다. 출력 dtype은 항상 float입니다.
- numpy.roll(a: ndarray, shift: int, *, axis: int | None = None) ndarray¶
a 의 요소를 shift 위치만큼 롤(순환 시프트)한 결과를 반환합니다.
axis=None(기본값)이면 배열이 먼저 평탄화됩니다. 음수 시프트는 반대 방향으로 롤합니다.
- numpy.sort(a: ndarray, *, axis: int = -1) ndarray¶
힙 정렬을 사용하여 axis 를 따라 정렬된 a 의 복사본을 반환합니다.
axis=None이면 배열이 먼저 평탄화됩니다. numpy의kind와order키워드는 구현되어 있지 않습니다.
통계¶
- numpy.bincount(x: ndarray, *, weights: ndarray | None = None, minlength: int | None = None) ndarray¶
1차원 음이 아닌 정수 배열 x 에서 각 값의 출현 횟수를 셉니다. x dtype은
uint8또는uint16이어야 합니다. weights 가 주어지면 x 의 각 항목이1대신 자신과 일치하는 가중치를 기여하고 출력은 dtypefloat입니다. 그렇지 않으면 출력은 dtypeuint16입니다. minlength 가 주어지면 출력 배열은 최소한 그만큼의 요소를 가집니다(추가 항목은 0).
변환¶
- numpy.compress(condition: ndarray | list | tuple, a: ndarray, *, axis: int | None = None) ndarray¶
불리언 condition 에 의해 axis 를 따라 선택된 a 의 슬라이스를 반환합니다.
axis=None이면 평탄화된 배열이 사용됩니다.
근사¶
선택¶
- numpy.take(a: ndarray, indices: ndarray | list | tuple, *, axis: int | None = None, out: ndarray | None = None, mode: str | None = None) ndarray¶
axis 를 따라 주어진 indices 위치의 요소를 a 에서 가져옵니다.
axis=None이면 평탄화된 배열이 사용됩니다. mode 는 범위를 벗어난 동작을 선택합니다:"raise"(기본값 –ValueError발생),"wrap"(축 길이로 모듈로), 또는"clip"(유효 범위로 클리핑; 음수 인덱스는 허용되지 않음). out 이 주어지면 결과가 그 안에 기록됩니다.
비트 연산¶
- numpy.bitwise_and(x1: ndarray, x2: ndarray) ndarray¶
두 정수 배열의 요소별 비트 AND; 브로드캐스팅이 지원됩니다. 정수가 아닌 dtype은 예외를 발생시킵니다.
필터링¶
다항식¶
I/O¶
- numpy.load(file: str) ndarray¶
save로 이전에 작성된 배열을 file(numpy의 플랫폼 독립적.npy포맷)에서 읽습니다. 파일의 바이트 순서가 호스트와 다르면 엔디언이 즉석에서 변환됩니다.
- numpy.loadtxt(file: str, *, delimiter: str | None = None, comments: str = '#', max_rows: int = -1, usecols: int | ndarray | list | tuple | None = None, dtype: int = float, skiprows: int = 0) ndarray¶
텍스트 file 에서 수치 데이터를 읽어
ndarray로 반환합니다. delimiter 의 기본값은 공백입니다. comments 는 줄 주석 마커입니다. max_rows 는 읽을 데이터 행 수를 제한합니다(-1은 전체). usecols 는 인덱스로 열을 선택합니다. skiprows 는 그만큼의 선행 행을 건너뜁니다. dtype 이 float가 아니면 값은 반올림으로 변환됩니다.
복소수 헬퍼¶
이 함수들은 ulab이 복소수 지원(ULAB_SUPPORTS_COMPLEX)과 함께 컴파일된 경우에만 사용할 수 있습니다.
- numpy.real(val: ndarray) ndarray¶
val 의 실수부를 반환합니다. 실수 dtype 입력의 경우 dtype을 보존하는 복사본을 반환합니다. 복소수 입력의 경우 float
ndarray를 반환합니다.
- numpy.imag(val: ndarray) ndarray¶
val 의 허수부를 반환합니다. 실수 dtype 입력의 경우 같은 dtype의 0으로 채워진 배열을 반환합니다. 복소수 입력의 경우 float
ndarray를 반환합니다.
유니버설 함수¶
요소별 수학 함수. 각각 스칼라 또는 ndarray 를 받아 일치하는 shape의 결과를 반환합니다(스칼라 입력의 경우 float 스칼라, 배열 입력의 경우 ndarray). ndarray 로 호출되면 결과는 새 부동소수점 ndarray 입니다. 결과를 같은 크기의 미리 할당된 float ndarray 에 기록하도록 선택적 out 키워드를 전달할 수 있습니다.
- numpy.acos(x: ndarray | float, /) ndarray | float¶
x 의 각 요소의 역코사인(arc cosine)을 계산합니다. 결과는 라디안 단위입니다.
- numpy.arctan2(y: ndarray | float, x: ndarray | float, /) ndarray | float¶
두 인자 역탄젠트
atan2(y, x)를 요소별로 계산합니다. 두 입력 간 브로드캐스팅을 지원합니다.
- numpy.around(x: ndarray, /, decimals: int = 0) ndarray¶
ndarrayx 의 요소를 주어진 소수 자릿수 decimals 로 반올림합니다. 첫 번째 인자는ndarray여야 합니다.
- numpy.atan(x: ndarray | float, /) ndarray | float¶
x 의 각 요소의 역탄젠트(arc tangent)를 계산합니다. 결과는 라디안 단위입니다.
- numpy.exp(x: ndarray | float, /) ndarray | float¶
x 의 각 요소의 지수
e**x를 계산합니다. 복소수 입력이 주어지면 복소수ndarray를 반환할 수 있습니다(복소수 지원이 활성화된 경우).
- numpy.sinc(x: ndarray | float, /) ndarray | float¶
x 의 각 요소의 정규화된 sinc 함수
sin(pi*x) / (pi*x)를 계산합니다.