Heim  >  Artikel  >  Backend-Entwicklung  >  Codeanalyse des Broadcast-Prinzips von Numpy in Python

Codeanalyse des Broadcast-Prinzips von Numpy in Python

不言
不言Original
2018-09-20 17:27:041509Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Code-Analyse des Numpy-Broadcast-Prinzips. Ich hoffe, dass er für Freunde hilfreich ist.

Um dieses Prinzip zu verstehen, schauen wir uns zunächst eine Reihe von Beispielen an:

# 数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。
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列的一维数组也是可以计算的。

Warum ist das so? Hier sei das Broadcasting-Prinzip von Numpy erwähnt:

Wenn die Abmessung der Hinterkante (die Abmessung beginnend am Ende) der beiden Arrays und die Achsenlänge übereinstimmen oder wobei wenn die Länge einer Seite 1 beträgt, gelten sie als sendekompatibel. Die Übertragung erfolgt bei fehlenden Dimensionen und/oder Dimensionen mit Achsenlänge 1.

Im obigen Code ist die Dimension von a (4, 3), die Dimension von c ist (1, 3); die Dimension von d ist (4, 1). Angenommen, es gibt zwei Arrays, das erste hat die Dimensionen (x_1, y_1, z_1) und das andere Array hat die Dimensionen (x_2, y_2, z_2). Um festzustellen, ob diese beiden Arrays berechnet werden können, können Sie die folgende Methode verwenden Zur Beurteilung:

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:
    不可以运算

Hier ist zu beachten: (3, 3, 2) und (3, 2) können operiert werden, da das zweidimensionale Array (3, 2) auch ausgedrückt werden kann als ( 1, 3, 2) ist es durchaus möglich, die oben genannten Regeln auf die gleiche Weise anzuwenden: (4, 2, 5, 4) und (2, 1, 4) können ebenfalls angewendet werden.

Das obige ist der detaillierte Inhalt vonCodeanalyse des Broadcast-Prinzips von Numpy in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn