NumPy基本操作:掌握科学计算的基石
作为一名资深的Python程序员,我深知NumPy在科学计算和数据分析中的核心地位。NumPy不仅提供了强大的多维数组对象ndarray,还封装了一系列基本操作,使得处理大型数据集变得简单而高效。本文将详细介绍NumPy的基本操作,包括数组的创建、查看、文件IO操作、数据类型转换、数组运算等。
1. 数组的创建
NumPy的核心是ndarray,即多维数组对象。创建数组最简单的方法是使用array
函数,将Python列表转换为ndarray。
import numpy as np
alist = [1, 3, 5, 7, 9]
arr = np.array(alist)
print(arr) # 输出:[1 3 5 7 9]
除了直接从列表创建数组,NumPy还提供了多种内置函数来生成特定类型的数组:
np.ones
:生成全1数组。np.zeros
:生成全0数组。np.full
:生成填充特定值的数组。np.arange
:生成等差数列数组。np.linspace
:在指定范围内生成指定数量的等间隔数组。np.random.randint
:生成随机整数数组。np.random.randn
:生成正态分布的随机数数组。
2. 数组的查看
NumPy的数组类ndarray具有多个重要属性,如维度、形状、元素个数和元素类型。
arr = np.random.randint(0, 100, size=(3, 4, 5))
print(arr.ndim) # 输出数组的维度
print(arr.shape) # 输出数组的形状
print(arr.size) # 输出数组元素的个数
print(arr.dtype) # 输出数组元素的类型
3. 文件IO操作
NumPy提供了方便的文件读写操作,支持保存和读取数组到文件中。
np.save
:保存单个数组到.npy文件。np.savez
:保存多个数组到.npz文件。np.load
:读取.npy或.npz文件中的数组。
x = np.random.randn(5)
np.save("x_arr.npy", x) # 保存单个数组
np.savez("some_array.npz", xarr=x, yarr=np.arange(0, 10)) # 保存多个数组
loaded_x = np.load("x_arr.npy") # 加载单个数组
loaded_y = np.load("some_array.npz")["yarr"] # 加载多个数组中的一个
4. 数据类型
NumPy支持多种数据类型,包括整数类型(int8、int16、int32、int64)和浮点类型(float16、float32、float64)。通过astype
方法可以转换数组的数据类型,从而减少内存占用。
arr = np.random.randint(0, 100, size=(3, 4, 5))
print(arr.dtype) # 查看原始数据类型
print(arr.nbytes) # 查看原始数组占用的字节数
arr_float32 = arr.astype(np.float32)
print(arr_float32.dtype) # 查看转换后的数据类型
print(arr_float32.nbytes) # 查看转换后数组占用的字节数
5. 数组运算
NumPy支持丰富的数组运算,包括算数运算、逻辑运算和比较运算。
- 算数运算:如加法、减法、乘法、除法和幂运算。
- 逻辑运算:如与(&)、或(|)、非(~)。
- 比较运算:如等于(==)、不等于(!=)、大于(>)、小于(<)。
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([2, 3, 1, 5, 9])
print(arr1 - arr2) # 减法
print(arr1 * arr2) # 乘法
print(arr1 / arr2) # 除法
print(arr1 ** arr2) # 幂运算