python科学计算:NumPy 数组的高级操作
1 数组的形状变换
NumPy 提供了多种方法来改变数组的形状。这些方法不会改变数组的内容,而是重新组织数据的排列方式。
1.1 reshape()
函数
reshape()
是最常用的形状变换函数,它可以改变数组的形状,前提是变换后的总元素数量与原数组一致。
import numpy as np# 创建一个一维数组
arr = np.arange(12)# 将一维数组变换为 3x4 的二维数组
reshaped_arr = arr.reshape(3, 4)print("原数组:", arr)
print("变换后的数组:\n", reshaped_arr)
注意: 如果变换后的维度不能满足元素总数要求,
reshape()
会抛出错误。
1.2 ravel()
函数
ravel()
可以将多维数组展平为一维数组,返回的是原数组的视图,修改展平后的数组也会影响原数组。
# 展平二维数组
flattened_arr = reshaped_arr.ravel()
print("展平后的数组:", flattened_arr)
1.3 transpose()
函数
transpose()
用于对多维数组进行转置操作,交换其维度。对于二维数组,转置会将行和列互换。
# 对二维数组进行转置
transposed_arr = reshaped_arr.transpose()
print("转置后的数组:\n", transposed_arr)
1.4 resize()
函数
resize()
和 reshape()
类似,但不同的是,resize()
会直接修改原数组,并且在调整数组大小时,会自动填充或截取数据。
# 使用 resize 改变数组大小
reshaped_arr.resize(2, 6)
print("使用 resize 改变后的数组:\n", reshaped_arr)
2 数组的合并与分割
NumPy 提供了方便的数组合并与分割操作,可以灵活处理数据的拼接与拆分。
2.1 数组的合并
水平合并(hstack) 和 垂直合并(vstack) 是最常见的数组合并操作,用于将多个数组沿着不同轴合并。
# 创建两个数组
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])# 水平合并
hstack_arr = np.hstack((arr1, arr2))
print("水平合并后的数组:\n", hstack_arr)# 垂直合并
vstack_arr = np.vstack((arr1, arr2))
print("垂直合并后的数组:\n", vstack_arr)
2.2 数组的分割
NumPy 提供了 split()
函数,可以将数组按照指定的规则进行分割。
# 创建一个数组
arr = np.arange(16).reshape(4, 4)# 按行分割为两个数组
split_arr = np.split(arr, 2, axis=0)
print("按行分割的数组:\n", split_arr)# 按列分割为两个数组
split_arr_col = np.split(arr, 2, axis=1)
print("按列分割的数组:\n", split_arr_col)
3 数组的排序与搜索
排序和搜索操作在数据分析中非常常用。NumPy 提供了多种方法来对数组进行排序、筛选和搜索。
3.1 数组排序
sort()
函数可以对数组进行排序,支持对一维数组、二维数组进行排序,并且可以指定沿哪个轴进行排序。
# 创建一个随机数组
arr = np.random.randint(1, 100, size=(4, 4))# 对数组进行排序(默认沿最后一个轴)
sorted_arr = np.sort(arr)print("原数组:\n", arr)
print("排序后的数组:\n", sorted_arr)
可以使用 axis
参数指定沿哪个维度进行排序:
# 沿着行排序
sorted_arr_row = np.sort(arr, axis=1)
print("按行排序后的数组:\n", sorted_arr_row)# 沿着列排序
sorted_arr_col = np.sort(arr, axis=0)
print("按列排序后的数组:\n", sorted_arr_col)
3.2 数组的搜索
argmax()
和 argmin()
函数用于查找数组中最大值或最小值的索引,where()
函数则可以用于根据条件查找满足条件的元素。
# 查找数组中最大值和最小值的位置
max_index = np.argmax(arr)
min_index = np.argmin(arr)print("最大值的位置:", max_index)
print("最小值的位置:", min_index)# 使用 where 查找数组中大于 50 的元素
condition = np.where(arr > 50)
print("数组中大于 50 的元素索引:", condition)
3.3 argsort()
函数
argsort()
返回的是排序后的索引值,而不是排序后的数组本身。这在需要保留原数组顺序的同时对索引进行操作时非常有用。
# 创建一个随机数组
arr = np.array([42, 12, 19, 33])# 使用 argsort 获取排序后的索引
sorted_index = np.argsort(arr)
print("排序后的索引:", sorted_index)# 使用排序后的索引访问原数组
sorted_arr = arr[sorted_index]
print("按索引排序后的数组:", sorted_arr)
4 数组的去重与重复
NumPy 提供了去重和生成重复数据的功能,这在数据预处理和特征工程中非常常见。
1 数组去重
unique()
函数用于对数组进行去重,返回的是去重后的数组。
# 创建一个包含重复元素的数组
arr = np.array([1, 2, 2, 3, 4, 4, 5])# 使用 unique 函数去重
unique_arr = np.unique(arr)
print("去重后的数组:", unique_arr)
2 数组的重复
tile()
和 repeat()
函数可以用于生成重复数据。
# 使用 repeat 函数重复每个元素 2 次
repeat_arr = np.repeat(arr, 2)
print("重复后的数组:", repeat_arr)# 使用 tile 函数将整个数组重复 2 次
tile_arr = np.tile(arr, 2)
print("数组重复后的结果:", tile_arr)