目录
1. 使用 reshape 改变形状
2. 使用 resize 改变大小和形状
3. 使用 ravel 或 flatten 展平数组
4. 使用 -1 推断尺寸
5. 使用 newaxis 增加维度
6. 使用 squeeze 移除单维度条目
1. 使用 reshape 改变形状
 
对于任何 NumPy 数组,你可以使用 reshape 方法来改变其形状,而不改变数据本身。
import numpy as np # 创建一个一维数组 
arr = np.arange(6) 
print("Original array:", arr) # 使用 reshape 改变数组形状 
reshaped_arr = arr.reshape((2, 3)) 
print("Reshaped array:\n", reshaped_arr)上述代码将一个包含六个元素的一维数组转换成了一个 2x3 的二维数组:
Original array: [0 1 2 3 4 5]
Reshaped array:[[0 1 2][3 4 5]]2. 使用 resize 改变大小和形状
 
resize 方法类似于 reshape,但它可以改变数组的大小。如果新大小大于原始大小,resize 会重复数组中的数据以填充新数组。
# 创建一个一维数组 
arr = np.array([1, 2, 3]) # 使用 resize 改变大小和形状 
np.resize(arr, (2, 3))这将创建一个新的 2x3 数组,其中原始数组的元素被复制以填充新数组。
3. 使用 ravel 或 flatten 展平数组
 
ravel 和 flatten 方法将多维数组转换为一维数组。flatten 总是返回一个新的数组,而 ravel 返回一个数组视图,如果可能的话。
# 创建一个二维数组 
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 使用 ravel 展平数组 
flat_arr = arr.ravel() 
print("Flattened array with ravel:", flat_arr) # 使用 flatten 展平数组 
flat_arr2 = arr.flatten() 
print("Flattened array with flatten:", flat_arr2)结果:
Flattened array with ravel: [1 2 3 4 5 6]
Flattened array with flatten: [1 2 3 4 5 6]
4. 使用 -1 推断尺寸
 
在重塑数组时,你可以在一个维度上使用 -1,让 NumPy 自动计算这个维度的大小。
# 创建一个一维数组 
arr = np.arange(12) # 使用 reshape 时在一个维度上使用 -1 
reshaped_arr = arr.reshape((3, -1)) 
print("Reshaped array with -1:\n", reshaped_arr)上述代码会创建一个 3x4 的二维数组,因为 -1 会被解释为 4 来匹配原始数组的总大小。结果:
Reshaped array with -1:[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]5. 使用 newaxis 增加维度
 
使用 np.newaxis 可以在数组中增加一个新的轴,也就是增加一个维度。
# 创建一个一维数组 
arr = np.array([1, 2, 3]) # 使用 newaxis 增加一个新的维度 
column_arr = arr[:, np.newaxis] 
print("Column array with newaxis:\n", column_arr) # 或者,将其变为行向量 
row_arr = arr[np.newaxis, :] 
print("Row array with newaxis:\n", row_arr)这种技术常用于将一维数组转换为列向量或行向量,以符合某些算法的输入要求。结果:
Column array with newaxis:[[1][2][3]]
Row array with newaxis:[[1 2 3]]6. 使用 squeeze 移除单维度条目
 
squeeze 方法用于从数组的形状中去除单维度的条目,即那些大小为 1 的维度。
# 创建一个具有单一维度的数组 
arr = np.array([[[1], [2], [3]]]) 
print("Original array shape:", arr.shape) 
# 使用 squeeze 移除单维度条目 
squeezed_arr = arr.squeeze() 
print("Squeezed array shape:", squeezed_arr.shape)
print("Squeezed array:", squeezed_arr)在上述代码中,我们将一个 1x3x1 的三维数组压缩成了一个 3x1 的二维数组。结果:
Original array shape: (1, 3, 1)
Squeezed array shape: (3,)
Squeezed array: [1 2 3]