NumPy 操作

2024年8月29日 | 阅读 10 分钟

Python 的 NumPy 包代表“Numerical Python”。该逻辑计算包包含一个高效的 N 维数组对象,并提供链接 C、C++ 和其他编程语言的设施。此外,它还有助于任意数字容量、基于线性代数的数学以及其他主题。NumPy 数组可以作为强大的多维容器用于通用数据。Python 数组:NumPy 数组是由行和列组成的健壮的 N 维对象。我们可以使用嵌套的 Python 列表来访问其元素并初始化 NumPy 数组。在结构层面,NumPy 数组由以下组合构成:

  • Data 引用显示了 NumPy 数组第一个字节的内存位置。
  • Data type 或 dtype 参数描述了存储在特定数组中的元素的 Python 类型。
  • Shape 表示数组的行数和列数。
  • Strides 指定在移动到下一个数组元素之前,需要跳过多少字节的系统内存。

NumPy 基础

全 1 数组

根据给定的参数创建一个 NumPy 数组,所有元素都为 1。

代码

输出

[[1. 1. 1.]
 [1. 1. 1.]]

全 0 数组

此函数返回一个 NumPy 数组,所有条目都设置为 0,维度与指定的相同。

代码

输出

[[0. 0. 0.]
 [0. 0. 0.]]

这些函数很简单,可以用来创建各种计算目的经常需要的示例数组。

Eye

现在我们来检查 eye 方法的工作原理。此函数的输出是一个包含对角线上为 1,其他地方为 0 的二维数组。

代码

输出

[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

类似地,diag() 方法构建一个二维数组,所有其他元素都设置为零,并且作为参数传递给函数的项被设置为对角线元素。

代码

输出

array([[78,  0,  0],
       [ 0, 56,  0],
       [ 0,  0, 89]])

Vstack() 和 Hstack()

我们可以使用 vstack() 函数垂直堆叠两个数组,并使用 hstack() 水平堆叠两个或多个数组。让我们通过几个例子来练习。

代码

输出

Vertically stacked: 
 [[2 3 4 5]
 [4 3 5 3]
 [6 3 5 2]
 [8 2 5 8]]
Horizontally stacked: 
 [[2 3 4 5 6 3 5 2]
 [4 3 5 3 8 2 5 8]]

NumPy 数组上的运算

算术运算

代码

输出

First Array:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
Second array:
[[11. 12. 13.]
 [14. 15. 16.]
 [17. 18. 19.]]

Adding two arrays:
[[11. 13. 15.]
 [17. 19. 21.]
 [23. 25. 27.]]

Subtracting two arrays:
[[-11. -11. -11.]
 [-11. -11. -11.]
 [-11. -11. -11.]]

Multiplying two arrays:
[[  0.  12.  26.]
 [ 42.  60.  80.]
 [102. 126. 152.]]

Dividing two arrays:
[[0.         0.08333333 0.15384615]
 [0.21428571 0.26666667 0.3125    ]
 [0.35294118 0.38888889 0.42105263]]

numpy.reciprocal()

此方法返回参数的逐元素倒数。当一个元素的绝对值大于 1 时,结果始终为 0,并且对于整数 0 会显示溢出警告。

代码

输出

The array is:
[23.  14.  63.9 23.5 23.7 13.   7. ]
After applying the reciprocal function array is:
[0.04347826 0.07142857 0.01564945 0.04255319 0.04219409 0.07692308
 0.14285714]

The second array is: 
[24]
After applying the reciprocal function the array is: 
[0]

numpy.power()

此函数将原始数组的元素视为指数语法的基数,然后将它们提高到第二个数组参数中提供的相邻元素的幂。

代码

输出

The original array is:
[3 5 2]
Applying the numpy power function: 
[ 9 25  4]
The second array is:
[2 4 5]
Applying the numpy power function: 
[  9 625  32]

numpy.mod()

此函数返回输入数组中对应元素的除法余数。numpy.remainder() 函数也产生相同的结果。

代码

输出

The original array:
[ 5 10 15]
The array for diving the original array:
[2 4 5]
Applying the numpy mod function:
[1 2 0]
Applying the numpy remainder function:
[1 2 0]

以下函数用于对具有复数的数组执行运算。

numpy.real() ? 此函数返回给定复数参数的实部。

numpy.imag() ? 此函数返回复数参数的虚部。

numpy.conj() ? 此函数返回给定复数参数的复共轭。它通过交换虚部的符号来获得。

numpy.angle() ? 此函数返回给定复数参数的角度。该函数有一个名为 degree 的参数。如果设置为 true,则函数将以度为单位返回角度;否则,角度将以弧度为单位返回。

代码

输出

Our complex array is:
[-0.-6.6j  0.+0.9j 14.+0.j   1.+9.j ]
Applying the numpy real function: 
[-0.  0. 14.  1.]
Applying the numpy imag function: 
[-6.6  0.9  0.   9. ]
Applying the numpy conj function: 
[-0.+6.6j  0.-0.9j 14.-0.j   1.-9.j ]
Applying the numpy angle function: 
[-1.57079633  1.57079633  0.          1.46013911]
Applying the numpy angle function again (result in degrees)
[-90.          90.           0.          83.65980825]

在条件表达式中使用 NumPy 数组

要识别满足您标准的数值,请使用条件。条件运算条件的结果也是一个 NumPy 数组,因为“数组”也是一个 NumPy 数组。我们的条件检查会产生一个包含布尔值的数组作为结果。

代码

输出

[False  True False False  True  True False]
[30 53 54]
[30 53 54]

numpy.dot()

我们将从两个参数都是标量或一维数组的情况开始。

代码

输出

12
Dimensions of a:  1
The dot product of [3] and [4] is:  12
The dot product of [ 4 -3] and [-6  3] is:  -33

逻辑运算符

"or" 和 "and" 逻辑运算符也逐元素应用于 NumPy 数组。为此,我们可以使用 numpy logical_or 和 logical_and 方法。

代码

输出

After or operation: 
 [[ True  True]
 [ True False]]
After and operation: 
 [[False False]
 [ True False]]

实现不同形状数组上的运算

到目前为止,我们已经处理了两个不同的实例,使用了 "+" 或 "*" 等简单运算。

  • 对标量和 NumPy 数组执行运算
  • 用于组合两个具有相同形状的数组的运算。

下一节将演示,即使数组的形状不同,我们仍然可以应用运算符。但只有在特定情况下它才能起作用。

广播

得益于 NumPy 强大的广播技术,可以对不同维度的数组进行算术运算。这意味着我们取一个较大维度的数组和一个较小维度的数组,然后将较小维度的数组转换为或扩展到较大维度的数组多次以执行运算。换句话说,较小的数组有时可以被“广播”以使其具有与较大数组相同的维度。

在我们的 Python 软件中,广播可以帮助我们避免循环。在基于 C 的 NumPy 实现中,迭代是隐式发生的。此外,我们还可以避免复制数据。

一个简单的例子用来说明广播的操作原理。

代码

输出

arr1: 
 [[3 2 4]
 [1 3 2]
 [5 3 3]]
arr2: 
 [2 2 2]
Multiplication using broadcasting: 
[[ 6  4  8]
 [ 2  6  4]
 [10  6  6]]
Addition using broadcasting: 
[[5 4 6]
 [3 5 4]
 [7 5 5]]

距离矩阵

几何学中的距离矩阵是一个矩阵或二维数组,它存储一个集合中成员之间的距离,这些成员是成对取样的,存在于数学、计算机科学,特别是图论中。如果集合有 n 个元素,则此二维数组的大小为 n x n。

一个连接坐标(在此例中是字母)到一个假设点的距离矩阵

代码

输出

[12 14 13 18 18 16 69 12 23 24 10 45]
[[ 0  2  1  6  6  4 57  0 11 12  2 33]
 [ 2  0  1  4  4  2 55  2  9 10  4 31]
 [ 1  1  0  5  5  3 56  1 10 11  3 32]
 [ 6  4  5  0  0  2 51  6  5  6  8 27]
 [ 6  4  5  0  0  2 51  6  5  6  8 27]
 [ 4  2  3  2  2  0 53  4  7  8  6 29]
 [57 55 56 51 51 53  0 57 46 45 59 24]
 [ 0  2  1  6  6  4 57  0 11 12  2 33]
 [11  9 10  5  5  7 46 11  0  1 13 22]
 [12 10 11  6  6  8 45 12  1  0 14 21]
 [ 2  4  3  8  8  6 59  2 13 14  0 35]
 [33 31 32 27 27 29 24 33 22 21 35  0]]

下一主题Sklearn Ensemble