什么是 NumPy?
NumPy 是一个强大的 Python 库, 主要用于在多维数组上执行计算。这个词 NumPy 是从两个字-数字 Python 派生的。NumPy 提供了一大组库函数和操作, 帮助程序员轻松地执行数值计算。这些类型的数值计算被广泛地应用在如下任务中:
- 机器学习模型:在编写机器学习算法时, 人们应该对矩阵进行各种数值计算。例如, 矩阵乘法, 移位, 加法等。NumPy 提供了一个很好的库, 便于 (在编写代码方面) 和快速 (速度) 计算。NumPy 阵列用于存储训练数据以及机器学习模型的参数。
- 图像处理和计算机图形:计算机中的图像表示为数字的多维数组。NumPy 成为了最自然的选择。NumPy 为快速操作图像提供了一些优秀的库功能。一些例子是镜像图像, 以某种角度旋转图像等。
- 数学任务:NumPy 是非常有用的执行各种数学任务, 如数值积分, 微分, 插值, 外推, 以及其他许多。因此, 当涉及到数学任务时, 它就形成了快速的基于 Python 的 MATLAB 替换。
NumPy 安装
在您的计算机上安装 NumPy 的最快和最简单的方法是在 shell 上使用以下命令: pip install numpy
.
这将在您的计算机上安装最新/最稳定的 NumPy 版本。通过 pip 安装是安装任何 Python 包的最简单方法。现在让我们来谈谈 NumPy 中最重要的概念, NumPy 数组。
NumPy 中的数组
NumPy 提供的最重要的数据结构是一个称为 NumPy 数组的强大对象。NumPy 数组是通常的 Python 数组的扩展。NumPy 阵列配备了大量的函数和运算符, 有助于快速编写我们上面讨论的各种类型计算的高性能代码。让我们来看看如何快速定义一维 NumPy 数组:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print my_array
在上面这个简单的例子中, 我们首先导入了 NumPy 库的使用 import numpy as np
。然后, 我们创建了一个简单的 NumPy 数组5整数, 然后我们打印它。去吧, 在你自己的机器上试用一下。使用 “NumPy 安装” 部分下的步骤, 确保已在计算机中安装了 NumPy。
现在让我们看看我们能对这个特定的 NumPy 阵列做些什么。
print my_array.shape
这将打印我们创建的数组的形状-(5)。这表示 my_array
是一个具有5个元素的数组。
我们也可以打印各个元素。就像正常的 Python 数组一样, NumPy 数组的索引是从0。
print my_array[0]
print my_array[1]
上述命令将分别在终端上打印1和2。我们还可以修改 NumPy 数组的元素。例如, 假设我们编写了以下2命令:
my_array[0] = -1
print my_array
我们将得到 [-1, 2, 3, 4, 5]
在屏幕上输出。
现在假设, 我们要创建一个长度为5的 NumPy 数组, 但所有元素都为 0, 我们能做到吗?是的
my_new_array = np.zeros((5))
print my_new_array
我们将得到 [0, 0, 0., 0., 0.] 作为输出。类似 np.zeros
的, 我们也有 np.ones
。如果我们要创建一个随机值数组怎么办?
my_random_array = np.random.random((5))
print my_random_array
我们将得到的输出将看起来类似 [0.22051844 0.35278286 0.11342404 0.79671772 0.62263151]。您得到的输出可能会有所不同, 因为我们使用的是随机函数, 它将每个元素分配为0和1之间的随机值。
现在让我们看看如何使用 NumPy 来创建2维数组。
my_2d_array = np.zeros((2, 3))
print my_2d_array
这将在屏幕上打印以下内容:
[[0. 0。0.]
[0. 0。0.]]
猜测以下代码的输出内容:
my_2d_array_new = np.ones((2, 4))
print my_2d_array_new
在这里:
[[1. 1。1. 1.]
[1. 1。1. 1.]]
基本上, 当您使用该函数 np.zeros()
或时 np.ones()
, 可以指定讨论数组大小的元组。在以上两个示例中, 我们使用了以下元组 (2、3) 和 (2、4) 分别表示2行和3列。像上面的多维数组可以使用 my_array[i][j]
符号来索引, 其中 i
指示行号并 j
指示列号. i
两个 j
从0开始.
my_array = np.array([[4, 5], [6, 1]])
print my_array[0][1]
以上代码段的输出为 5, 因为它是索引0行和索引1列中的元素。
还可以按如下方式打印 my_array 的形状:
print my_array.shape
输出为 (2、2), 表示数组中有2行和2列。
NumPy 提供了一种有效的方法来提取多维数组的行/列。例如, 考虑 my_array
我们上面定义的示例。
[[4 5]
[6 1]]
假设, 我们希望从它提取第二列 (索引 1) 的所有元素。在这里, 可以看到, 第二列由两个元素组成: 5 和1。为此, 我们可以执行以下操作:
my_array_column_2 = my_array[:, 1]
print my_array_column_2
请注意, 我们已经提供了一个冒号 (), 而不是行号, 我们 :
已经使用了值1的列号。输出将是: [5, 1]。
我们同样可以从多维 NumPy 数组中提取一行。现在, 让我们看看 NumPy 在几个阵列上执行计算时所提供的能量。
NumPy 中的阵列操纵
使用 NumPy, 您可以轻松地在阵列上执行数学运算。例如, 可以添加 NumPy 数组, 可以将它们减去, 可以将它们相乘, 甚至将它们分割。下面是以下几个示例:
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b
difference = a - b
product = a * b
quotient = a / b
print “Sum = \n“, sum
print “Difference = \n“, difference
print “Product = \n“, product
print “Quotient = \n“, quotient
The output will be as follows:
Sum =
[[ 6
] [10。12.]] 差异 = [[-4.-4]
[-4.-4]]
产品 = [[5]。12.] [21。32.]] 商数 = [[0.2 0.33333333] [0.42857143 0.5]]
正如您所看到的, 乘法运算符执行元素的乘法, 而不是矩阵乘法。要执行矩阵乘法, 可以执行以下操作:
matrix_product = a.dot(b)
print “Matrix Product = “, matrix_product
输出将是:
[[19. 22]
[43. 50]]
总结
正如您所看到的, NumPy 在其提供的库功能方面确实非常强大。可以使用 NumPy 公开的优秀接口在单行代码中执行大计算。这使得它成为各种数值计算的优雅工具。如果你希望自己发展成数学家或数据科学家的职业, 你一定要考虑掌握它。在精通 NumPy 之前, 你需要了解 Python。
找到最好的Python 教程编程社区对 Hackr 的建议。一切都好!