如何使用Numpy的乘法函数

317 阅读6分钟

在本教程中,我将解释如何使用Numpy的multiply函数--又称np.multiply--来将矩阵相乘。

我将解释np.multiply的语法,该函数如何工作,以及如何使用它。

如果你需要特定的东西,你可以点击以下任何一个链接。

目录:

好的,让我们开始吧。

Numpy Multiply的快速介绍

正如你可能已经猜到的,Numpy的乘法函数矩阵相乘。

你可以使用np.multiply来将两个相同大小的数组相乘。 这将计算出一个叫做Hadamard乘积的东西。 在Hadamard乘法中,两个输入具有相同的形状,而输出包含了每个输入值的元素明智的乘积。

An example showing how np.multiply computes the element-wise product of the inputs.

你也可以使用 np.multiply 来将一个矩阵乘以一个向量。 如果你用一个矩阵乘以一个向量(例如,一个多维数组乘以一个低维数组),Numpy会进行广播。

这两种技术都很简单,我将向你展示这两种技术的例子。

但首先,让我们看一下语法。

np.multiply的语法

Numpy multiply函数的语法很简单。

An image that explains the syntax of the Numpy multiply function.

请记住,这个语法假设你已经用代码import numpy as np ,导入了Numpy。

输入数组的格式

注意,该函数有两个输入参数,我将其命名为arr1arr1 。 这些应该是Numpy数组或类似数组的对象,如Python的列表。

另外,对输入数组的形状也有一些限制。

使用 np.multiply 的一种方法是让两个输入数组的形状完全相同 (即它们有相同的行和列数)。 如果输入数组具有相同的形状,那么Numpy multiply函数将对输入的值进行相乘。

An example of how Numpy multiply performs pairwise multiplication of two matrices (i.e., the Hadamard product).

或者,如果两个输入数组的大小一样,那么其中一个数组必须有一个可以在另一个数组中广播的形状。

如果你是Numpy的初学者,广播的理解有些复杂,所以我将在例子部分给你看一个例子。

附加参数

除了两个输入参数外,Numpy的乘法函数还有一些可选参数。

  • out
  • 其中

这些参数有点少用,但因此我不会在这里解释它们。

np.multiply的输出

np.multiply的输出是一个新的Numpy数组,包含了输入数组的元素相乘。

说到这里,对于标量有一个特殊情况:如果np.multiply的两个输入都是标量值,那么输出将是一个标量。

示例:如何计算Numpy数组的相乘关系

现在,让我们看一下一些例子。

例子

初步代码:导入Numpy并创建数组

在你运行任何例子之前,你需要运行一些初步代码。

具体来说,在你运行任何例子之前,你需要导入Numpy,并且需要创建一些我们可以使用的Numpy数组。

导入Numpy

首先,在我们使用任何Numpy函数之前,我们需要导入Numpy。

你可以用下面的代码来做。

import numpy as np

创建数组

接下来,我们需要创建一些我们可以操作的numpy数组。

这里,我们将创建几个Numpy对象。

  • 一个一维的数字 "向量"。
  • 一个由1到9的数字组成的2维 "矩阵"(有序)
  • 一个由1到9的数字组成的二维 "矩阵"(随机)

为了做到这一点,我们将使用一些Numpy函数,如Numpy数组函数Numpy arange函数Numpy reshape方法Numpy随机选择。(如果你不确定我们在这里做什么,你应该阅读其他那些教程)。

# CREATE 1D 'VECTOR'
vector_1d = np.array([10,20,30])

# CREATE 2D MATRIX OF NUMBERS, 1 TO 9
numbers_1_to_9 = np.arange(start = 1, stop = 10)
matrix_2d_ordered = numbers_1_to_9.reshape((3,3))

# CREATE 2D MATRIX OF NUMBERS, 1 TO 9, RANDOMIZED
np.random.seed(22)
matrix_2d_random = np.random.choice(size = (3,3), a = numbers_1_to_9, replace = False)

一旦你导入了Numpy并且创建了数组,你就可以运行这些例子了。

例子1:在两个标量上使用Numpy的乘法运算

首先,我们将从最简单的情况开始。

在这里,我们将使用np.multiply将两个标量值相乘。

np.multiply(3,4)

输出

12

解释

很明显,这是非常简单和直接的。

在这里,我们只是将3乘以4。 其结果是12。

实例2:数组乘以标量

接下来,我们将用一个二维Numpy数组乘以一个标量(即,我们将用一个矩阵乘以一个标量)。

np.multiply(matrix_2d_ordered, 2)

输出

array([[ 2,  4,  6],
       [ 8, 10, 12],
       [14, 16, 18]])

解释

那么这里发生了什么?

我们用两个参数调用了np.multiply:Numpy数组matrix_2d_ordered 和标量值2。

对于输出,np.multiply将matrix_2d_ordered 的每个值都乘以2。

这是很直接的。

实例3:两个相同大小的Numpy数组相乘

现在,让我们将两个相同大小的数组相乘。

在这里,我们要将matrix_2d_orderedmatrix_2d_random 相乘。

np.multiply(matrix_2d_ordered, matrix_2d_random)

输出

array([[ 9,  4, 12],
       [12, 35,  6],
       [56, 40, 54]])

解释

这里,np.multiply是将每个输入矩阵的值按元素相乘。

And image that shows how np.multiply multiples two same-sized matrixes.

输出是一个与输入相同大小的矩阵,它包含了输入矩阵值的逐元乘积。

(这就是所谓的Hadamard乘积)。

例子4:矩阵乘以一个向量(即广播)

最后,让我们再做一个例子。

在这里,我们要用一个二维的输入数组乘以一个一维的数组。 实际上,这就像用一个矩阵乘以一个向量。

np.multiply(matrix_2d_ordered, vector_1d)

输出

array([[ 10,  40,  90],
       [ 40, 100, 180],
       [ 70, 160, 270]])

解释

在这个例子中,我们用一个二维矩阵乘以一个一维向量。(也就是说,我们将一个二维Numpy乘以一个一维Numpy数组)。

当我们这样做时,Numpy执行了所谓的 "广播"。 实际上,它将一维向量视为一行数据,并将该向量乘以二维数组的每一行。

因此,它用矩阵的第1行乘以矢量,按元素计算。然后用矩阵的第2行乘以该向量。 以此类推。

An explanation showing how to multiply a matrix by a vector with Numpy multiply.

请记住,当你这样做时,向量必须有一个形状,以便它可以在矩阵上播放。

在本教程中,我已经解释了如何在Numpy中用np.multiply进行数组相乘。

这应该对你的数组乘法有所帮助,但如果你真的想学习Numpy,还有很多东西要学。