如何使用Numpy的最大值函数

895 阅读7分钟

在本教程中,我将解释如何使用Numpy的maximum函数来计算两个Numpy数组的元素间最大值。

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

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

目录:

让我们先快速介绍一下这个函数。

Numpy Maximum的快速介绍

Numpy的maximum函数在Python中计算两个输入数组或值的逐个元素的最大值。

An image that shows how the Numpy maximum function computes the element-wise maximum of two input arrays.

说到这里,它也会对其他一些输入类型进行操作,比如标量值,以及不同类型的Numpy数组。 我将在语法部分进一步解释这些操作,并在例子部分向你展示。

Numpy最大值与Numpy最大值不同

有一个非常简短的注意事项。

Numpy的max函数与Numpy的max函数是不同的。

Numpy max函数用于识别Numpy数组中的最大值。 所以np.max通常接受一个Numpy数组作为输入,并将返回最大值(尽管有一些使用它的方法,它将返回行或列的最大值)。

相比之下,Numpy maximum(我们在本教程中讨论的是它)计算的是两个数组的元素间最大值。 所以np.maximum通常将两个Numpy数组作为输入,并将返回一个数组,其中包含每一对值的元素间最大值。(当然,还有一些额外的使用方法,我稍后会介绍)。

np.max和np.max的工作方式不同,所以要确保你使用正确的那一个。

好的。 现在我们已经谈到了Numpy maximum的作用,让我们看看它的语法。

np.maximum的语法

Numpy maximum的语法很简单。

An image that explains the syntax of np.maximum.

请记住:这个语法假设你已经用别名np ,导入了Numpy。

输入数组的格式

在这里,我想补充一些关于两个输入的格式的说明。

在上面解释语法的图片中,我显示了两个输入(即参数)。 在语法解释中,我将这些参数称为arr1arr1

我还指出,这些通常是Numpy数组。

说到这里,np.maximum将对各种输入进行操作。

具体来说,np.maximum会在以下情况下工作。

  • 两个同样大小的Numpy数组
  • 两个数字
  • 一个数字和一个Numpy数组
  • 一个Numpy数组和另一个尺寸较小的数组

此外,np.max可以对类似数组的对象进行操作,如列表和图元。

np.maximum的输出

np.maximum的输出通常是一个新的Numpy数组,其中包含元素的最大值,不过也有一些注意事项。

如果输入是两个标量值,输出将是一个标量(而不是一个数组)。

此外,如果输入是一个Numpy数组和一个低维数组,那么np.maximum将产生一个新的数组,但它将执行 "广播"。广播可能会让Numpy的新用户感到困惑,所以我将在例子部分展示一个例子

额外的参数

除了两个输入数组外,Numpy maximum函数还有两个可选参数。

  • out
  • 其中

这些参数很少使用,所以我不会在本教程中解释它们。

例子:如何在数字和Numpy数组上使用Numpy最大值

现在我们已经了解了语法,让我们通过一些例子来了解如何使用Numpy maximum函数。

例子

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

在你运行这些例子之前,你需要做一些事情来进行设置。

你需要导入Numpy。

你还需要创建一些Numpy数组,以便我们在例子中使用。

导入Numpy

首先,我们需要导入Numpy。

你可以用下面这段代码导入Numpy。

import numpy as np

创建数组

接下来,我们需要创建一些Numpy数组,以便在我们的例子中使用。

具体来说,我们将创建三个数组。

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

为了制作这些,我们将使用一些不同的Numpy函数。

我们将使用np.array来手动定义一维值的向量(1、2和3)。

我们将使用Numpy arange来制作一个带有数字序列的数组。 这个数组将被称为 numbers_negative4_to_4 。(我们不会在我们的例子中直接使用它,但我们将用它来创建接下来的几个数组。)

我们将创建一个有序的二维数字数组,称为matrix_2d_ordered 。 为了创建这个数组,我们将在 numbers_negative4_to_4 ,使用Numpy reshape。

最后,我们将创建一个随机的二维数组,称为matrix_2d_random 。 为了创建这个数组,我们将在numbers_negative4_to_4使用Numpy random choice

(如果这些让你感到困惑,我建议你点击上面几段中的链接......它们会解释这些函数是如何工作的。)

vector_1d = np.array([1,2,3])

# CREATE 2D MATRIX OF NUMBERS, 1 TO 9
numbers_negative4_to_4 = np.arange(start = -4, stop = 5)
matrix_2d_ordered = numbers_negative4_to_4.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_negative4_to_4, replace = False)

一旦你运行了所有这些代码,你就可以准备运行这些例子了。

例子1:在两个标量上使用Numpy最大值

让我们从一个简单的例子开始。

这里,我们将在两个标量值上使用Numpy的最大值。

np.maximum(0,4)

输出

4

解释

这是很简单的。

在这里,我们要计算0和4的最大值,也就是4。

实例2:在一个数组和一个标量上使用np.maximum

接下来,我们将在一个数组和一个标量上使用np.maximum。

np.maximum(matrix_2d_ordered, 0)

输出

array([[0, 0, 0],
       [0, 0, 1],
       [2, 3, 4]])

解释

Numpy数组matrix_2d_ordered ,包含了从4到4的数字,排列在一个3×3的数组中。

在这里,我们使用np.maximum来计算matrix_2d_ordered 中每个元素的最大值,以及0。

matrix_2d_ordered 的一些值是负的。 对于这些值,np.maximum返回0。 对于其余的值,它返回 matrix_2d_ordered 的原始值。

(注意,这个操作本质上是relu函数

实例3:在两个同样大小的数组上使用Numpy Maximum

接下来,让我们在两个同样大小的数组上使用np.maximum。

具体来说,我们将在matrix_2d_randommatrix_2d_ordered 上使用 np.maximum 。

np.maximum(matrix_2d_ordered, matrix_2d_random)

输出

array([[ 4, -3, -1],
       [-1,  2,  1],
       [ 3,  3,  4]])

解释

在这里,np.max正在计算matrix_2d_randommatrix_2d_ordered 的元素最大值。

An image that shows np.maximum computing the element-wise maximum of two input arrays.

此外,注意输出的形状。输出的Numpy数组与输入数组的大小和形状相同。 这就是np.maximum在我们给它两个同样大小的数组时的表现。

实例4:在一个二维数组和一个一维数组上使用Numpy maximum(即广播)

最后,让我们在一个一维Numpy数组(即一个矢量)和一个二维Numpy数组(即一个矩阵)上使用np.maximum。

np.maximum(matrix_2d_ordered, vector_1d)

输出

array([[1, 2, 3],
       [1, 2, 3],
       [2, 3, 4]])

解释

在这个例子中,我们在matrix_2d_ordered 的行上 "广播 "了vector_1d

什么是广播?

注意,两个数组的列数相同,但行数不同。 这使得Numpy可以使用一维数组的值来操作二维数组的每一行

这里,np.maximum将一维数组 "广播 "到二维数组的各行中。

所以np.maximum计算了vector_1dmatrix_2d_ordered 第1行的元素最大值。然后它计算了vector_1dmatrix_2d_ordered2行的元素最大值。以此类推。

An example of using np.maximum with broadcasting (i.e., a 1D array and a 2D array).

请记住,只有当vector_1d 中的元素数与matrix_2d_ordered 中的列数相同时,这才有可能。只有当两个输入中的元素数都是适当的形状时,广播才能正常运行。

在本教程中,我已经解释了如何用np.maximum计算元素间的最大值。