本文为NumPy系列第二篇,深入解析数组操作的核心方法:
重塑:通过reshape()灵活调整维度,利用flatten()一键展平多维数据;
合并:掌握np.concatenate()、vstack/hstack实现垂直/水平拼接,解决多数据集整合难题;
分割:精准切割数组的np.split()策略,应对数据分块处理需求。
1 重塑数组
1.1 reshape():调整数组维度
import numpy as np# 示例数组
arr = np.arange(12) # 重塑为3行4列的二维数组
reshaped = arr.reshape(3, 4)
print(reshaped)# 使用 -1 自动计算某一维度
auto_reshape = arr.reshape(2, -1) # 2行,自动计算列数(6列)
print(auto_reshape.shape) # 注意:元素总数必须一致,否则报错 ValueError
[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
(2, 6)
1.2 flatten():展平为⼀维数组
# 将多维数组展开为一维(返回拷贝)
matrix = np.array([[1, 2], [3, 4]])
flattened = matrix.flatten()
print(flattened)# 修改展平后的数组不影响原数组
flattened[0] = 100
print(matrix) # 原数组不变
[1 2 3 4]
[[1 2][3 4]]
2 合并数组
2.1 np.concatenate():通用拼接
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 沿行方向(axis=0)拼接(垂直堆叠)
vertical = np.concatenate((a, b), axis=0)
print(vertical)# 沿列方向(axis=1)拼接(需维度匹配)
c = np.array([[7], [8]])
horizontal = np.concatenate((a, c), axis=1)
print(horizontal)
[[1 2][3 4][5 6]]
[[1 2 7][3 4 8]]
2.2 np.vstack() 与 np.hstack()
# vstack:垂直堆叠(等效于 concatenate(axis=0))
v_combined = np.vstack((a, b)) # 结果同上文 vertical
print(v_combined)
# hstack:水平堆叠(等效于 concatenate(axis=1))
d = np.array([[5, 6]])
h_combined = np.hstack((a, d.T)) # 转置后拼接
print(h_combined)
[[1 2][3 4][5 6]]
[[1 2 5][3 4 6]]
3 分割数组
3.1 np.split():按索引或份数分割
arr = np.arange(9) # [0 1 2 3 4 5 6 7 8 9]# 等量分割为3份(需可整除)
subarrays = np.split(arr, 3)
print(subarrays) # 按指定位置分割(索引点为2和5)
split_at = [2, 5]
parts = np.split(arr, split_at)
print(parts)# 二维数组分割示例
matrix = np.array([[1,2,3], [4,5,6], [7,8,9]])
split_rows = np.split(matrix, 3, axis=0) # 按行分割为3个单行数组
print(split_rows)
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
[array([0, 1]), array([2, 3, 4]), array([5, 6, 7, 8])]
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]