Bootstrap

NumPy的基础操作教程及其实例

NumPy是Python中用于科学计算的一个基础库,提供了大量的数学函数和操作数组的工具。以下是NumPy的基础操作教程及其实例:

一、NumPy的安装与导入

首先,确保已经安装了NumPy库。如果尚未安装,可以使用pip进行安装:

pip install numpy

安装完成后,在Python代码中导入NumPy库,并习惯性地为其设置一个别名np:

import numpy as np

二、创建数组

NumPy提供了多种创建数组的方法:

  1. 从列表创建数组
arr_1d = np.array([1, 2, 3, 4, 5])  # 一维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])  # 二维数组
  1. 创建指定形状且元素全为0或1的数组
arr_zeros = np.zeros((3, 4))  # 3行4列,元素全为0
arr_ones = np.ones((2, 3))  # 2行3列,元素全为1
  1. 创建单位矩阵
arr_eye = np.eye(3)  # 3x3的单位矩阵
  1. 创建随机数组
rand_arr = np.random.random((3, 3))  # 3x3的随机浮点数数组
normal_arr = np.random.randn(3, 2)  # 3x2的标准正态分布随机数数组
  1. 创建等间隔数组
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)

十六、实例:数据分析应用

假设是数据分析师,需要分析一组股票价格的数据,找出价格最高的股票和计算所有股票价格的平均值:


;