numpy --- numpy互換の配列操作¶
ulab の numpy サブモジュールは、ndarray n次元配列型を中心に構築された numpy互換 API を提供します。CPython の numpy から厳選したサブセットを実装しており、配列の構築、要素ごとの数学演算、リダクションと統計、線形代数、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(デフォルト)、および(complex サポートがコンパイルされている場合)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¶
新しい形状を持つ配列のビューを返します。要素の総数は変わってはならず、変わる場合は
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 配列には実装されていません。
比較: ==、!=、<、<=、>、>=。それぞれブロードキャストされた形状のブール ndarray を返します。
ビット演算(整数配列のみ): &、|、^。これらを float または complex 配列に適用すると TypeError が送出されます。
単項: +(コピーを返す)、-(符号反転。符号なし dtype では値が \(2^N\) を法として循環する)、abs()(要素ごとの絶対値。符号なし dtype では計算なしでコピーを返す)、~(ビット反転。整数 dtype のみ)、len()(最初の軸の長さを返す)。
インデックスとスライス: a[i]、a[i, j, ...]、a[start:stop:step]、ブールマスクインデックス(a[mask])、整数配列(ファンシー)インデックスはすべて、読み取りと書き込みの両方でサポートされます。
反復: ndarray を反復すると、最初の軸に沿った部分配列が生成されます(1次元配列では一度に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)上で等間隔の値を返します。位置引数が1つだけ与えられた場合、それはstart = 0のstopとして扱われます。dtype が省略された場合、入力から推論されます(start、stop、step がすべて整数で範囲内であれば整数)。
- numpy.asarray(a: ndarray | list | tuple, *, dtype: int | None = None) ndarray¶
a が既に dtype に一致する dtype を持つ
ndarray(または dtype がNone)である場合、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 のゼロで埋められた配列を返します。(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]上の num 個の等間隔のサンプルを返します(endpoint がFalseの場合は半開区間)。retstep がTrueの場合、タプル(samples, step)を返します。複素数の start/stop は複素数配列を生成します(complex サポートが有効な場合)。
- 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'(デフォルト)の場合、最初の2つの入力はデカルト座標として扱われ、それらの出力軸が入れ替えられます。'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¶
2つの配列 / スカラの要素ごとの最大値。引数は互いにブロードキャストされます。dtype が異なる場合、出力はアップキャストされます。
- numpy.minimum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
2つの配列 / スカラの要素ごとの最小値。
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¶
要素を shift 個分だけ転がした(循環シフトした)a を返します。
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 が与えられた場合、出力配列は少なくともその数の要素を持ちます(余分なエントリはゼロです)。
変換¶
- 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¶
2つの整数配列の要素ごとのビット単位 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 が complex サポート付き(ULAB_SUPPORTS_COMPLEX)でコンパイルされた場合のみ利用可能です。
- numpy.real(val: ndarray) ndarray¶
val の実部を返します。実数 dtype の入力の場合、dtype を保持したコピーを返します。複素数入力の場合、float の
ndarrayを返します。
- numpy.imag(val: ndarray) ndarray¶
val の虚部を返します。実数 dtype の入力の場合、同じ dtype のゼロの配列を返します。複素数入力の場合、float の
ndarrayを返します。
ユニバーサル関数¶
要素ごとの数学関数。それぞれスカラまたは ndarray を受け取り、一致する形状の結果を返します(スカラ入力には float スカラ、配列入力には ndarray)。ndarray で呼び出された場合、結果は新しい浮動小数点 ndarray です。オプションの out キーワードを渡して、結果を同じサイズの事前割り当て済み float ndarray に書き込むことができます。
- numpy.arctan2(y: ndarray | float, x: ndarray | float, /) ndarray | float¶
2引数の逆正接
atan2(y, x)を要素ごとに計算します。2つの入力間のブロードキャストをサポートします。
- numpy.around(x: ndarray, /, decimals: int = 0) ndarray¶
ndarrayx の要素を指定された小数桁数 decimals に丸めます。最初の引数はndarrayでなければなりません。
- numpy.exp(x: ndarray | float, /) ndarray | float¶
x の各要素の指数
e**xを計算します。複素数入力が与えられた場合は複素数ndarrayを返すことがあります(complex サポートが有効な場合)。