NumPy是Python中用于科学计算的一个基础库,提供了大量的数学函数和操作数组的工具。以下是NumPy的基础操作教程及其实例:
一、NumPy的安装与导入
首先,确保已经安装了NumPy库。如果尚未安装,可以使用pip进行安装:
pip install numpy
安装完成后,在Python代码中导入NumPy库,并习惯性地为其设置一个别名np:
import numpy as np
二、创建数组
NumPy提供了多种创建数组的方法:
- 从列表创建数组:
arr_1d = np.array([1, 2, 3, 4, 5]) # 一维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
- 创建指定形状且元素全为0或1的数组:
arr_zeros = np.zeros((3, 4)) # 3行4列,元素全为0
arr_ones = np.ones((2, 3)) # 2行3列,元素全为1
- 创建单位矩阵:
arr_eye = np.eye(3) # 3x3的单位矩阵
- 创建随机数组:
rand_arr = np.random.random((3, 3)) # 3x3的随机浮点数数组
normal_arr = np.random.randn(3, 2) # 3x2的标准正态分布随机数数组
- 创建等间隔数组:
linspace_arr = np.linspace(0, 10, 5) # 在0到10之间生成5个等间隔的数
三、数组的属性
数组有多个属性,如形状(shape)、大小(size)和数据类型(dtype):
print(arr_2d.shape) # 输出数组的形状
print(arr_2d.size) # 输出数组中元素的总数
print(arr_2d.dtype) # 输出数组的数据类型
四、数组的形状改变
使用reshape方法可以改变数组的形状,而不改变其数据:
arr = np.arange(12) # 创建一个包含0到11的数组
reshaped_arr = arr.reshape((3, 4)) # 将数组形状改变为3行4列
五、数组索引与切片
可以通过索引访问数组中的元素,或使用切片来访问子数组:
print(arr_1d[0]) # 输出第一个元素
print(arr_1d[-1]) # 输出最后一个元素
print(arr_2d[0:2, 1:3]) # 输出二维数组的一个子矩阵
六、数组运算
NumPy支持数组之间的逐元素运算,如加法、减法、乘法和除法:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
sum_arr = arr1 + arr2 # 数组加法
diff_arr = arr1 - arr2 # 数组减法
prod_arr = arr1 * arr2 # 数组乘法
quot_arr = arr1 / arr2 # 数组除法
此外,NumPy还提供了矩阵乘法运算:
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
mat_product = np.dot(mat1, mat2) # 矩阵乘法,也可以使用np.matmul函数
七、数学函数和统计
NumPy提供了许多数学函数和统计方法:
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr) # 计算平均值
std_deviation = np.std(arr) # 计算标准差
max_value = np.max(arr) # 计算最大值
min_value = np.min(arr) # 计算最小值
median_value = np.median(arr) # 计算中位数
total_value = np.sum(arr) # 计算总和
八、布尔索引和条件筛选
可以使用布尔索引来筛选数组中的元素:
bool_arr = arr_1d > 3 # 创建一个布尔数组
filtered_arr = arr_1d[bool_arr] # 筛选出大于3的元素
九、数组堆叠与分割
可以使用stack、concatenate、hstack、vstack等函数来堆叠数组,使用split函数来分割数组:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
concatenated_arr = np.concatenate((arr1, arr2)) # 水平堆叠
arr3 = np.array([[1, 2], [3, 4]])
arr4 = np.array([[5, 6], [7, 8]])
vstacked_arr = np.vstack((arr3, arr4)) # 垂直堆叠
arr = np.arange(10)
split_arrs = np.split(arr, [3, 7]) # 在索引3和7处分割数组
十、数组转置与扁平化
可以使用T属性来转置二维数组,使用flatten方法来扁平化数组:
arr = np.array([[1, 2], [3, 4]])
transposed_arr = arr.T # 转置数组
flattened_arr = arr.flatten() # 扁平化数组
十一、数组扩展与缩减维度
可以使用expand_dims方法来扩展数组的维度,使用squeeze方法来缩减数组的维度:
arr = np.array([1, 2, 3])
expanded_arr = np.expand_dims(arr, axis=1) # 在轴1上扩展维度
arr_3d = np.array([[[1, 2, 3], [4, 5, 6]]])
squeezed_arr = np.squeeze(arr_3d) # 缩减维度
十二、文件输入输出
可以将数组保存到文件,或从文件中加载数组:
np.save('my_array.npy', arr_1d) # 将数组保存到文件
loaded_arr = np.load('my_array.npy') # 从文件加载数组
np.savetxt('my_array.csv', arr_2d, delimiter=',') # 将数组保存为CSV文件
loaded_arr_from_csv = np.loadtxt('my_array.csv', delimiter=',') # 从CSV文件中加载数组
十三、线性代数运算
NumPy支持多种线性代数运算,如计算矩阵的行列式、逆矩阵,以及求解线性方程组等:
mat = np.array([[1, 2], [3, 4]])
det_value = np.linalg.det(mat) # 计算矩阵的行列式
inv_matrix = np.linalg.inv(mat) # 计算矩阵的逆
A = np.array([[1, 2], [3, 4]])
b = np.array([1, 2])
x = np.linalg.solve(A, b) # 解线性方程组Ax=b
十四、数组的唯一化及其他集合逻辑
可以找出数组中的唯一元素,执行集合操作如并集、交集等:
arr = np.array([1, 2, 2, 3, 4, 4, 5])
unique_elements = np.unique(arr) # 找出数组中的唯一元素
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([3, 4, 5, 6, 7])
intersection = np.intersect1d(arr1, arr2) # 计算两个数组的交集
union = np.union1d(arr1, arr2) # 计算两个数组的并集
十五、迭代数组
可以使用nditer对象来迭代数组中的元素:
arr = np.array([[1, 2, 3], [4, 5, 6]])
for element in np.nditer(arr):
print(element)
十六、实例:数据分析应用
假设是数据分析师,需要分析一组股票价格的数据,找出价格最高的股票和计算所有股票价格的平均值: