什么是numpy
NumPy(Numerical Python)是一个用于进行科学计算和数据分析的Python库,提供了丰富的高性能数值计算工具和数组操作功能。本文为大家介绍np库中的一些常用函数。
NumPy的常用函数
创建数组
您可以使用NumPy来创建多维数组,例如:
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 创建全零数组
zeros_arr = np.zeros((3, 4))
# 创建全一数组
ones_arr = np.ones((2, 3))
# 创建指定范围内的数组
range_arr = np.arange(0, 10, 2)
# 创建随机数组
random_arr = np.random.rand(3, 3)
接下来进行具体函数的讲解
np.array
np.array 函数用于创建一个 NumPy 数组。可以传递一个 Python 列表或者其他数组-like 的对象作为参数,生成一个新的 NumPy 数组。
import numpy as np
# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.zeros
np.zeros 函数用于创建一个全零数组,可以指定数组的形状和数据类型。
import numpy as np
# 创建一个形状为 (3, 4) 的全零二维数组
arr = np.zeros((3, 4))
np.ones
np.ones 函数用于创建一个全一数组,可以指定数组的形状和数据类型。
import numpy as np
# 创建一个形状为 (2, 3) 的全一二维数组
arr = np.ones((2, 3))
np.empty
np.empty 函数用于创建一个未初始化的数组,只分配内存空间而不填充任何值,可以指定数组的形状和数据类型。
import numpy as np
# 创建一个形状为 (3, 3) 的未初始化二维数组
arr = np.empty((3, 3))
np.arange
np.arange 函数用于创建一个等差数列数组,可以指定起始值、终止值和步长。
import numpy as np
# 创建一个从 0 到 9 的一维数组
arr = np.arange(10)
# 创建一个从 1 到 10 的一维数组
arr = np.arange(1, 11)
# 创建一个从 0 到 9,步长为 2 的一维数组
arr = np.arange(0, 10, 2)
np.linspace
np.linspace 函数用于创建一个等间距的数组,可以指定起始值、终止值和元素个数。
import numpy as np
# 创建一个从 0 到 1 的五个元素的一维数组
arr = np.linspace(0, 1, 5)
np.logspace
np.logspace 函数用于创建一个对数间距的数组,可以指定起始值、终止值、元素个数和对数的底数。
import numpy as np
# 创建一个从 10^0 到 10^3 的五个元素的一维数组
arr = np.logspace(0, 3, 5)
数组运算
NumPy提供了丰富的数组运算功能,例如:
import numpy as np
# 数组加法
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result_add = np.add(arr1, arr2)
# 数组减法
result_subtract = np.subtract(arr1, arr2)
# 数组乘法
result_multiply = np.multiply(arr1, arr2)
# 数组除法
result_divide = np.divide(arr1, arr2)
# 数组取余
result_modulo = np.mod(arr1, arr2)
# 数组的矩阵乘法
matrix_multiply = np.dot(arr1, arr2)
数组操作
NumPy提供了丰富的数组操作功能,例如:
import numpy as np
# 数组形状操作
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 改变数组形状
arr_reshape = np.reshape(arr, (3, 3))
# 数组转置
arr_transpose = np.transpose(arr)
# 数组展平
arr_flatten = np.flatten(arr)
# 数组拼接
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_concatenate = np.concatenate((arr1, arr2), axis=0)
# 数组切片
arr_slice = arr[0:2, 1:3]
接下来是详解:
np.shape
np.shape 函数用于获取数组的形状,返回一个表示数组维度的元组。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np.shape(arr)) # 输出 (2, 3)
np.reshape
np.reshape 函数用于改变数组的形状,返回一个新的数组,不修改原数组。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
arr_reshape = np.reshape(arr, (2, 3))
print(arr_reshape)
# 输出:
# [[1 2 3]
# [4 5 6]]
np.concatenate
np.concatenate 函数用于将两个或多个数组沿指定轴连接,返回一个新的数组。
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
# 沿行轴(axis=0)连接两个数组
arr_concat = np.concatenate((arr1, arr2), axis=0)
print(arr_concat)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
np.split
np.split 函数用于将一个数组分割成多个子数组,返回一个包含子数组的列表。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
arr_split = np.split(arr, 3) # 将数组分割成三个等长的子数组
print(arr_split)
# 输出:
# [array([1, 2]), array([3, 4]), array([5, 6])]
np.transpose
np.transpose 函数用于对数组进行转置操作,返回一个新的数组。
import numpy as np
arr = np.array([[1, 2], [3, 4]])
arr_transpose = np.transpose(arr)
print(arr_transpose)
# 输出:
# [[1 3]
# [2 4]]
np.flatten / np.ravel
np.flatten 和 np.ravel 函数用于将多维数组转换成一维数组,返回一个新的数组。
import numpy as np
arr = np.array([[1, 2], [3, 4]])
arr_flatten = arr.flatten()
print(arr_flatten)
# 输出: [1 2 3 4]
np.add / np.subtract / np.multiply / np.divide
np.add、np.subtract、np.multiply 和 np.divide 函数分别用于进行数组的加法、减法、乘法和除法运算,返回一个新的数组。
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 数组加法
arr_add = np.add(arr1, arr2)
print(arr_add) # 输出: [5 7 9]
# 数组减法
arr_subtract = np.subtract(arr1, arr2)
print(arr_subtract) # 输出: [-3 -3 -3]
# 数组乘法
arr_multiply = np.multiply(arr1, arr2)
print(arr_multiply) # 输出: [4 10 18]
# 数组除法
arr_divide = np.divide(arr1, arr2)
print(arr_divide) # 输出: [0.25 0.4 0.5]
np.dot
np.dot 函数用于计算数组的矩阵乘法,返回一个新的数组。
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 矩阵乘法
arr_dot = np.dot(arr1, arr2)
print(arr_dot)
# 输出:
# [[19 22]
# [43 50]]
np.sum / np.mean / np.max / np.min
np.sum、np.mean、np.max 和 np.min 函数分别用于计算数组的和、平均值、最大值和最小值。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
# 数组求和
arr_sum = np.sum(arr)
print(arr_sum) # 输出: 21
# 数组平均值
arr_mean = np.mean(arr)
print(arr_mean) # 输出: 3.5
# 数组最大值
arr_max = np.max(arr)
print(arr_max) # 输出: 6
# 数组最小值
arr_min = np.min(arr)
print(arr_min) # 输出: 1
广播
NumPy的广播功能允许不同形状的数组进行计算,例如:
import numpy as np
# 广播示例
arr1 = np.array([1, 2, 3])
arr2 = np.array([[4, 5, 6], [7, 8, 9]])
result_broadcast = arr1 + arr2
线性代数
NumPy提供了丰富的线性代数函数,例如:
import numpy as np
# 矩阵乘法
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
result_dot = np.dot(matrix1, matrix2)
# 矩阵求逆
matrix = np.array([[1, 2], [3, 4]])
result_inv = np.linalg.inv(matrix)
# 特征值和特征向量
result_eigvals, result_eigvecs = np.linalg.eig(matrix)
数组索引和切片
在 NumPy 中,可以使用索引和切片操作来访问数组中的元素或者获取数组的子数组。
import numpy as np
# 创建一个数组
arr = np.array([0, 1, 2, 3, 4, 5])
# 使用索引获取数组中的元素
print(arr[2]) # 输出 2
# 使用切片获取数组的子数组
print(arr[1:4]) # 输出 [1, 2, 3]
需要注意的是,索引和切片的索引值是从 0 开始的,且可以是负数,表示从末尾开始计数。
对于多维数组,可以使用多个索引值或者切片来访问不同维度的元素或者子数组。
import numpy as np
# 创建一个二维数组
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
# 使用索引获取二维数组中的元素
print(arr[1, 2]) # 输出 5
# 使用切片获取二维数组的子数组
print(arr[:2, 1:]) # 输出 [[1, 2], [4, 5]]