欢迎访问宙启技术站
智能推送

Numpy库核心函数:数组处理与运算详解

发布时间:2023-06-13 12:43:18

NumPy是Python中用于科学计算的一个开源库。它提供了一种强大的多维数组对象,以及各种派生对象(如掩码数组和矩阵)。NumPy库中的核心函数涵盖了数组处理与运算、线性代数、傅里叶变换、随机数生成等许多方面。本文就主要介绍NumPy库的核心函数中关于数组处理与运算的部分。

1. 创建数组

在NumPy中,数组是三种主要数据类型之一(另外两种是列表和元组)。可以使用numpy.array函数来创建数组。以下是一些示例:

import numpy as np

# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])

# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 创建一个全为0的三维数组
arr3 = np.zeros((3, 4, 5))

# 创建一个全为1的二维数组
arr4 = np.ones((2, 3))

# 创建一个随机的三维数组
arr5 = np.random.random((2, 4, 3))

2. 数组运算

NumPy数组支持各种运算,包括基本数学运算(如加、减、乘、除)、矩阵运算(如点积和叉积)和逻辑运算(如与、或、非运算)。

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([6, 7, 8, 9, 10])

# 对数组进行基本运算
print(arr1 + arr2)    # 输出 [ 7  9 11 13 15]
print(arr1 - arr2)    # 输出 [-5 -5 -5 -5 -5]
print(arr1 * arr2)    # 输出 [ 6 14 24 36 50]
print(arr1 / arr2)    # 输出 [0.16666667 0.28571429 0.375 0.44444444 0.5 ]

arr3 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr4 = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]

# 对数组进行矩阵运算
print(np.dot(arr3, arr4))    # 输出 [[ 30  24  18] [ 84  69  54] [138 114  90]]

# 对数组进行逻辑运算
arr5 = np.array([True, False, True])
arr6 = np.array([False, True, False])
print(np.logical_and(arr5, arr6))    # 输出 [False False False]
print(np.logical_or(arr5, arr6))    # 输出 [ True  True  True]
print(np.logical_not(arr5))          # 输出 [False  True False]

3. 数组索引与切片

数组中的元素可以使用索引进行访问。与Python的列表一样,数组的索引从0开始,而且可以使用负数索引从末尾开始访问元素。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(arr[0])    # 输出 1
print(arr[-1])   # 输出 5

arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr2[0, 0])    # 输出 1
print(arr2[1, 2])    # 输出 6

除了单个元素之外,还可以对数组进行切片,以获取某一段连续的元素。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(arr[1:4])    # 输出 [2 3 4]
print(arr[:3])     # 输出 [1 2 3]
print(arr[2:])     # 输出 [3 4 5]

对于多维数组,也可以使用切片来获取某一部分数组。

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr[:2, 1:])    # 输出 [[2 3] [5 6]]

4. 数组形状改变

在NumPy中,可以使用reshape方法来改变数组的形状。reshape方法的参数是一个表示新形状的元组。

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5, 6])
arr2 = arr1.reshape((2, 3))

print(arr1)          # 输出 [1 2 3 4 5 6]
print(arr2)          # 输出 [[1 2 3] [4 5 6]]

arr3 = np.array([[1, 2], [3, 4], [5, 6]])
arr4 = arr3.reshape((1, 6))

print(arr3)          # 输出 [[1 2] [3 4] [5 6]]
print(arr4)          # 输出 [[1 2 3 4 5 6]]

除了reshape方法之外,还可以使用flatten方法将多维数组转化为一维数组。

import numpy as np

arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = arr1.flatten()

print(arr1)          # 输出 [[1 2] [3 4] [5 6]]
print(arr2)          # 输出 [1 2 3 4 5 6]

5. 数组合并与分割

在NumPy中,可以使用concatenate方法将两个或多个数组沿指定轴合并。 个参数是一个表示要合并的数组的元组,而第二个参数是一个表示要沿哪个轴进行合并的整数参数。

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.concatenate((arr1, arr2), axis=0)
arr4 = np.concatenate((arr1, arr2), axis=1)

print(arr1)          # 输出 [[1 2] [3 4]]
print(arr2)          # 输出 [[5 6] [7 8]]
print(arr3)          # 输出 [[1 2] [3 4] [5 6] [7 8]]
print(arr4)          # 输出 [[1 2 5 6] [3 4 7 8]]

与合并相反,分割将一个数组分成两个或多个小的数组。可以使用split方法来执行这个操作。split方法的 个参数是要分割的数组,而第二个参数是以哪个轴进行分割的整数参数。分割后的数组存储在一个列表中。

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
arr1, arr2, arr3 = np.split(arr, [2, 4])

print(arr)           # 输出 [1 2 3 4 5 6]
print(arr1)          # 输出 [1 2]
print(arr2)          # 输出 [3 4]
print(arr3)          # 输出 [5 6]

arr4 = np.array([[1, 2], [3, 4], [5, 6]])
arr5, arr6 = np.split(arr4, [2])

print(arr4)          # 输出 [[1 2] [3 4] [5 6]]
print(arr5)          # 输出 [[1 2] [3 4]]
print(arr6)          # 输出 [[5 6]]

以上就是NumPy库中的一些核心函数,包括创建数组、数组运算、数组索引与切片、数组形状改变、数组合