ホームページ >バックエンド開発 >Python チュートリアル >Python で numpy.ufunc 関数を使用する方法
numpy.ufunc の機能は何ですか?回答: これは numpy 関数です。numpy は配列テンソルをターゲットとするため、ほぼすべての関数は ufunc です。
配列全体を要素ごとに操作する関数です。したがって、ufunc は総称であり、これらの関数は多数あります。
関数 (または UFUNC) は、要素単位で NDARRAY を操作する関数で、配列ブロードキャスト、型変換、およびその他の標準関数をサポートします。 Ufunc は、関数を「ベクトル化」し、固定数の特定の入力を受け取り、固定数の特定の出力を生成するラッパーです。基礎となるユニバーサル関数 (ufunc) の詳細を参照してください。
NumPy では、一般関数は numpy.ufunc
クラスのインスタンスです。多くの組み込み関数は、コンパイルされた C コードで実装されます。基本的な ufuncs はスカラーで動作しますが、基本要素がサブ配列 (ベクトル、行列など) であり、ブロードキャストが他の次元で行われるジェネリック型もあります。 ufunc
新しいウィンドウ ファクトリ関数で frompyfuncopen を使用してカスタム インスタンスを生成することもできます。
この関数は、以下に示すように、ufun 関数に対応する入力パラメータの数を表します。 。
np.add.nin 2 np.multiply.nin 2 np.power.nin 2 np.exp.nin 2
この関数は、次の ufunc の対応する入力パラメータの数など、ufun 関数に対応する出力パラメータの数を表します。
np.add.nout 1 np.multiply.nout 1 np.power.nout 1 np.exp.nout 1
numpy.ufunc はパラメータの数に対応します。
np.add.nargs 3 np.multiply.nargs 3 np.power.nargs 3 np.exp.nargs 2
たとえば、np.add 関数には 3 つのパラメータと 2 つの入力があります。
a = np.array([2,4,5,6]) b = np.array([2,2,3,3]) c = np.zeros((4,)) np.add( a,b,c ) print( c )
ufunc の入力データ型形式を示します: ufunc が操作できる数値 NumPy 型の数 - 合計 18 。
np.add.ntypes 18 np.multiply.ntypes 18 np.power.ntypes 17 np.exp.ntypes 7 np.remainder.ntypes 14
np.add.types ['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O'] np.multiply.types ['??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O'] np.power.types ['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O'] np.exp.types ['f->f', 'd->d', 'g->g', 'F->F', 'D->D', 'G->G', 'O->O'] np.remainder.types ['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'OO->O']
次元を示す 2 つのパラメータ、array.ndim と array.shape があります。ndim はテンソルの総次元数を指し、形状は各次元のベクトルの長さを指します。たとえば、次の例:
x = np.array([1, 2, 3]) print(x.ndim) print(x.shape) y = np.zeros((2, 3, 4)) print(y.ndim) print(y.shape)
結果:
1
(3,)
3
(2, 3, 4)
各パス関数は配列入力を受け入れ、入力に対してコア関数を要素ごとに実行することによって配列出力を生成します (要素は通常はスカラーですが、一般化ベクトルまたは ufunc の高次部分配列になります)。標準のブロードキャスト ルールに従って、入力がまったく同じ形状でなくても、操作が効率的に機能するようにします。ブロードキャストは 4 つのルールを通じて理解できます。
すべての入力配列は、形状が 1 によって先行される新しいウィンドウの ndimopen という最大の入力配列よりも小さいです。
出力形状の各次元のサイズは、その次元のすべての入力サイズの最大値です。
特定の次元の入力のサイズがその次元の出力のサイズと一致する場合、またはその値が正確に 1 の場合、入力を計算に使用できます。
形状の次元が 1 の場合、その次元の最初のデータ エントリがその次元に沿ったすべての計算に使用されます。言い換えれば、新しいウィンドウでの ufuncopen のステッピング マシンは、その次元に沿ってステップを実行しません (その次元のストライドは 0 になります)。
ブロードキャストは、さまざまな形状の配列の処理方法を決定するために NumPy 全体で使用されます。たとえば、すべての算術演算 (
、-
、#) ##* ,...の間) ndarray は、新しいウィンドウでの配列操作の前にブロードキャストされます。
a.shape が (5,1) の場合、
b.shape は (1,6)、
c です。 shape は (6,) であり、
d.shape は () であるため、 d がスカラーである場合、 a 、 b 、 c および d はすべて次元 (5, 6) にブロードキャストできます。 :
c被视为类似于一个(1,6)的矩阵,因此类似于一个(5,6)的矩阵,其中c的每一项元素被广播到每一行,最终,...
d 的作用类似于(5,6)数组,其中重复单个值。
可以在通用函数 (ufunc) 的文档中找到有关 ufunc 的详细说明。
调用ufuncs格式:
op( *x[, out], where=True, **kwargs)
将 op 应用于参数 *x elementwise,广播参数。
广播规则是:
长度为 1 的维度可以添加到任一数组之前。
数组可以沿长度为 1 的维度重复。
参数:
*xarray_like
outndarray,None,或 ndarray 和 None 的元组,可选
用于放置结果的备用数组对象;如果提供,它必须具有输入广播的形状。数组元组(可能仅作为关键字参数)的长度必须等于输出的数量;对 ufunc 分配的未初始化输出使用 None。
wherearray_like,可选
此条件通过输入广播。当条件为 True 时,ufunc 的结果将被赋值给 out 数组。在其他地方,out 数组将保留其原始值。请注意,如果通过默认 out=None 创建未初始化的 out 数组,则其中条件为 False 的位置将保持未初始化状态。
a = np.array([2,4,5,6]) b = np.array([2,2,3,3]) c = np.zeros((4,)) np.add( a,b,c ) print( c )
5.2 行数组和列数组
a = np.arange(3) b = np.arange(3)[:, np.newaxis] print(a) print(b)
输出:
[0 1 2]
[[0]
[1]
[2]]
5.3 广播规则示例
a = np.arange(3) b = np.arange(3)[:, np.newaxis] print(a) print(b) s = a + b print(s)
在执行ufunc运算后,常常伴随数列运算,它们如下
__call__(*args, **kwargs) |
Call self as a function. |
accumulate(array[, axis, dtype, out]) |
Accumulate the result of applying the operator to all elements. |
at(a, indices[, b]) |
Performs unbuffered in place operation on operand 'a' for elements specified by 'indices'. |
outer(A, B, /, **kwargs) |
Apply the ufunc op to all pairs (a, b) with a in A and b in B. |
reduce(array[, axis, dtype, out, keepdims, ...]) |
Reduces array's dimension by one, by applying ufunc along one axis. |
reduceat(array, indices[, axis, dtype, out]) |
Performs a (local) reduce with specified slices over a single axis. |
resolve_dtypes(dtypes, *[, signature, ...]) |
Find the dtypes NumPy will use for the operation. |
累计模式不可以单独使用,而是与add以及multiply搭配使用:
np.add.accumulate([2, 3, 5]) array([ 2, 5, 10]) np.multiply.accumulate([2, 3, 5]) array([ 2, 6, 30])
np.add.accumulate(I, 0) array([[1., 0.], [1., 1.]]) np.add.accumulate(I) # no axis specified = axis zero array([[1., 0.], [1., 1.]])
1) 将项目 0 和 1 设置为负值:
a = np.array([1, 2, 3, 4]) np.negative.at(a, [0, 1]) print( a ) array([-1, -2, 3, 4])
2) 递增项目 0 和 1,递增项目 2 两次:
a = np.array([1, 2, 3, 4]) np.add.at(a, [0, 1, 2, 2], 1) print( a ) array([2, 3, 5, 4])
3) 将第一个数组中的项 0 和 1 添加到第二个数组,并将结果存储在第一个数组中:
a = np.array([1, 2, 3, 4]) b = np.array([1, 2]) np.add.at(a, [0, 1], b) print(a) array([2, 4, 3, 4])
简单数组外积
np.multiply.outer([1, 2, 3], [4, 5, 6]) array([[ 4, 5, 6], [ 8, 10, 12], [12, 15, 18]])
张量的外积
A = np.array([[1, 2, 3], [4, 5, 6]]) A.shape (2, 3) B = np.array([[1, 2, 3, 4]]) B.shape (1, 4) C = np.multiply.outer(A, B) C.shape; C (2, 3, 1, 4) array([[[[ 1, 2, 3, 4]], [[ 2, 4, 6, 8]], [[ 3, 6, 9, 12]]], [[[ 4, 8, 12, 16]], [[ 5, 10, 15, 20]], [[ 6, 12, 18, 24]]]])
a = np.multiply.reduce([2,3,5]) print( a) 30
X = np.arange(8).reshape((2,2,2)) X array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) np.add.reduce(X, 0) array([[ 4, 6], [ 8, 10]]) np.add.reduce(X) # confirm: default axis value is 0 array([[ 4, 6], [ 8, 10]]) np.add.reduce(X, 1) array([[ 2, 4], [10, 12]]) np.add.reduce(X, 2) array([[ 1, 5], [ 9, 13]])
您可以使用 initial 关键字参数以不同的值初始化缩减,以及在何处选择要包含的特定元素:
np.add.reduce([10], initial=5) 15 np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10) array([14., 14.]) a = np.array([10., np.nan, 10]) np.add.reduce(a, where=~np.isnan(a)) 20.0
np.minimum.reduce([], initial=np.inf) inf np.minimum.reduce([[1., 2.], [3., 4.]], initial=10., where=[True, False]) array([ 1., 10.]) np.minimum.reduce([]) Traceback (most recent call last):
以上がPython で numpy.ufunc 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。