简介
Numpy(Numerical Python)是⼀个开源的Python科学计算库,⽤于快速处理任意维度数组的工具。
Numpy⽀持常⻅的数组和矩阵操作。对于同样的数值计算任务,使⽤Numpy⽐直接使⽤Python要简洁的多,性能好
Numpy使⽤ndarray对象来处理多维数组,该对象是⼀个快速⽽灵活的⼤数据容器。
ndarray
ndarray
是 Numpy 中的核心特性之一,它是一个多维数组对象,提供了高效的存储和处理大型数据集的能力
1. ndarray 的创建
可以通过多种方法创建 ndarray,例如:
- 从 Python 列表或元组创建
- 使用 Numpy 函数如
np.zeros
,np.ones
,np.arange
,np.linspace
等
import numpy as np # 从列表创建 arr1 = np.array([1, 2, 3]) # 使用 np.zeros 创建 arr2 = np.zeros((3, 4)) # 创建一个 3x4 的零矩阵
2. ndarray 的属性
主要的属性包括:
ndarray.shape
: 数组的形状ndarray.size
: 数组中元素的总数ndarray.dtype
: 数组元素的数据类型ndarray.ndim
: 数组的维度数
3. 数据类型
ndarray 支持多种数据类型,如 int
, float
, bool
,str等。合适的数据类型使用可以提高存储和计算效率.
4. 索引和切片
ndarray 支持复杂的索引和切片操作,可以选择数组的特定部分。
5. 形状操作
可以改变数组的形状而不改变其数据,例如使用 reshape
方法。
6. 数学运算
ndarray 支持各种数学运算,包括加减乘除、统计操作、线性代数运算等。
7. 广播
广播是 Numpy 对不同形状数组进行算术运算的能力。
最佳实践
- 选择合适的数据类型:根据需要选择适当的数据类型以节省内存和提高性能。
- 避免使用循环:利用 Numpy 的向量化操作,避免使用显式循环。
- 内存管理:注意数组的复制和视图的区别,以避免不必要的内存使用。
- 使用广播:理解和利用广播机制可以简化代码并提高效率。
1. 使用 NumPy 的内建函数
NumPy 提供了一系列内建函数来创建数组,这些函数通常比手动输入数据更高效。
- 使用
np.zeros
,np.ones
,np.arange
,np.linspace
等来创建特定形状和模式的数组。 - 示例:
import numpy as np # 创建一个全是零的 3x3 矩阵 zeros = np.zeros((3, 3)) # 创建一个 1 到 10 的数组 range_array = np.arange(1, 11)
2. 选择合适的数据类型
- 选择合适的数据类型可以减少内存占用和提高性能。
- 示例:
# 使用参数dtype指定传教创建数组的类型 float_array = np.array([1, 2, 3], dtype=np.float32) print(float_array) # 有点说明是浮点型 int_array = np.array([1, 2, 3]) print(int_array) # 有点说明是浮点型,否则就是int
3. 利用向量化操作
- 尽可能使用向量化操作而不是循环,这样可以利用 NumPy 的内部优化。
- 示例:
# 使用向量操作,替代for循环 arr = np.array([1, 2, 3, 4, 5]) # 向量化加法 arr_plus_10 = arr + 10 print(arr_plus_10)
4. 理解视图(View)和副本(Copy)
- 修改数组的视图会影响原数组,而副本则不会。
- 使用
copy()
方法可以创建一个数组的副本。 - 示例:
arr = np.array([1, 2, 3, 4, 5]) # 创建副本 arr_copy = arr.copy()
5. 使用广播机制
- 广播是 NumPy 的一种机制,允许对不同形状的数组进行算术运算。
- 理解广播规则可以帮助你写出更简洁高效的代码。
- 示例:
arr = np.array([1, 2, 3]) # 广播机制 result = arr * 2 # 数组中的每个元素都乘以 2
6. 内存布局的考虑
- 理解数组的内存布局(例如,行主序或列主序)对于性能至关重要,特别是在处理大型数组时。
- 使用
np.reshape
和np.transpose
等函数时要注意数组的内存布局。
示例代码
import numpy as np # 创建数组 arr = np.arange(10, dtype=np.float32) # 向量化操作 arr_squared = arr ** 2 # 利用广播 arr_scaled = arr * 2.5 # 视图和副本 arr_copy = arr.copy() arr_copy[0] = 100 print(arr[0]) # 原数组不受影响 # 处理大型数组时考虑内存布局 large_arr = np.random.rand(1000, 1000) transpose_arr = large_arr.T # 转置操作
示例
import numpy as np # 导入numpy # 从列表创建 arr_from_list = np.array([1, 2, 3, 4, 5]) print(type(arr_from_list)) print(arr_from_list) # 从元组创建 arr_from_tuple = np.array((6, 7, 8, 9, 10)) print(type(arr_from_tuple)) print(arr_from_tuple)
列表、元组是有逗号隔开的,而数组元素之间没有逗号哦
术语
Numpy
Numerical Python python科学计算
ndarray
N-dimensional array N维数组
标签:arr,简介,001,数组,np,array,Numpy,ndarray From: https://www.cnblogs.com/allenxx/p/17891287.html