高效操控数组形状是NumPy有效数据处理的基础。本教程深入探讨了重塑和调整NumPy数组大小的两个核心函数:`reshape()`和`resize()`。我们将探索它们的功能、细微差别以及最佳实践,确保您能够自信地在数据科学项目中使用它们。
目录
1. numpy.reshape()
numpy.reshape()
函数是一个多功能工具,用于修改NumPy数组的形状而不改变其底层数据。它需要数组和所需的新的形状作为输入。至关重要的是,新的形状必须与原始数组的大小兼容(元素总数必须保持不变)。
import numpy as np
arr = np.arange(12) # 创建一个数组 [0, 1, 2, ..., 11]
print("原始数组:n", arr)
reshaped_arr = np.reshape(arr, (3, 4)) # 重塑为 3x4 矩阵
print("n重塑后的数组:n", reshaped_arr)
# 使用 -1 自动计算维度
auto_reshape = np.reshape(arr, (-1, 3))
print("n自动重塑后的数组:n", auto_reshape)
# 处理不兼容形状的错误
try:
invalid_reshape = np.reshape(arr, (2,7))
print(invalid_reshape)
except ValueError as e:
print(f"n错误: {e}")
2. ndarray.reshape()
ndarray.reshape()
方法提供了一种替代方法,直接作用于现有的ndarray
对象。其功能与numpy.reshape()
相同;唯一的区别在于调用方法。
arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3)) # 方法调用
print("n重塑后的数组(方法调用):n", reshaped_arr)
3. 共享内存注意事项
numpy.reshape()
和ndarray.reshape()
通常都是原地操作。这意味着它们不会创建数组数据的副本;而是修改底层数据的视图。这是非常节省内存的。重塑后的数组的更改会反映在原始数组中,反之亦然。但是,这也需要仔细考虑,特别是如果您需要保留原始数组的内容。要创建副本,请使用.copy()
方法:
arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # 也修改了原始数组!
print("n重塑修改后原始数组:n", arr)
arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() # 创建一个副本
reshaped_arr_copy[0,0] = 100 # 只修改副本
print("n复制修改后原始数组:n", arr)
4. numpy.resize()
numpy.resize()
函数提供了改变数组大小的功能,不像reshape()
那样保留元素总数。resize()
可以改变元素的数量。如果新的大小更大,则数组将用零或重复的元素填充。如果较小,则元素将被截断。重要的是,resize()
*总是*返回一个新的数组;它不会原地修改原始数组。
arr = np.arange(5)
resized_arr = np.resize(arr, (8,)) # 调整大小到长度 8
print("n调整大小后的数组(用零填充):n", resized_arr)
resized_arr_2 = np.resize(arr,(2,)) #调整大小到长度 2
print("n调整大小后的数组(截断):n", resized_arr_2)
resized_arr_3 = np.resize(arr, (2,3)) #调整大小到 2x3,将重复数组
print("n调整大小后的数组(重复):n", resized_arr_3)
本教程全面概述了重塑和调整NumPy数组大小的方法。掌握这些技术对于在科学计算和数据科学中熟练进行数据操作至关重要。