Python での Numpy のブロードキャスト原理のコード分析

不言
リリース: 2018-09-20 17:27:04
オリジナル
1524 人が閲覧しました

この記事の内容は、Numpy のブロードキャスト原理を Python でコード解析したもので、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。

この原則を理解するために、まず一連の例を見てみましょう:

# 数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。
In [12]: import numpy as np
In [13]: a = np.arange(1,13).reshape((4, 3))
In [14]: a * 2
Out[14]: array([[ 2, 4, 6],
                [ 8, 10, 12],
                [14, 16, 18],
                [20, 22, 24]])
# 接下来我们看一下数组与数组之间的计算
In [17]: b = np.arange(12,24).reshape((4,3))
In [18]: b
Out[18]: array([[12, 13, 14],
                [15, 16, 17],
                [18, 19, 20],
                [21, 22, 23]])
In [19]: a + b
Out[19]: array([[13, 15, 17],
                [19, 21, 23],
                [25, 27, 29],
                [31, 33, 35]])
In [20]: c = np.array([1,2,3])
In [21]: a+c
Out[21]: array([[ 2, 4, 6],
                [ 5, 7, 9],
                [ 8, 10, 12],
                [11, 13, 15]])
In [22]: d = np.arange(10,14).reshape((4,1))
In [23]: d
Out[23]: array([[10],
                [11],
                [12],
                [13]])
In [24]: a + d
Out[24]: array([[11, 12, 13],
                [15, 16, 17],
                [19, 20, 21],
                [23, 24, 25]])
# 从上面可以看出,和线性代数中不同的是,m*n列的m行的一维数组或者n列的一维数组也是可以计算的。
ログイン後にコピー

これはなぜですか? numpy のブロードキャスト原理については、ここで説明する必要があります。

2 つの配列の 後縁の次元 (最後から始まる次元) 軸の長さが または と一致する場合ここで、一辺の長さが 1 の場合、ブロードキャスト互換とみなされます。ブロードキャストは、軸長 1 の 欠落次元 および/または 次元 で発生します。

上記のコードでは、a の次元は (4, 3)、c の次元は (1, 3)、d の次元は (4, 1) です。したがって、2 つの配列があるとします。最初の配列の次元は (x_1、y_1、z_1)、もう 1 つの配列の次元は (x_2、y_2、z_2) です。これら 2 つの配列が計算できるかどうかを判断するには、次のメソッドを使用できます。判断方法:

if z_1 == z_2 or z_1 == 1 or z_2 == 1:
    if y_1 == y_2 or y_1 == 1 or y_2 == 1:
        if x_1 == x_2 or x_1 == 1 or x_2 == 1:
            可以运算
        else:
            不可以运算
    else:
        不可以运算
else:
    不可以运算
ログイン後にコピー

ここで注意すべき点: 2 次元配列 (3, 2) は ( 1, 3 , 2) についても、上記のルールを適用すれば全く問題ありませんし、(4, 2, 5, 4) や (2, 1, 4) も同様に演算できます。

以上がPython での Numpy のブロードキャスト原理のコード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート