
它是python专门设计的一个工具库适合高性能的数据处理应用场景。如下例子可以清楚对比出numpy数组和list数组计算同一个操作展现出的性能差异import time # 创建一个0-999999 python列表 py_list list(range(1000000)) # 创建一个0-999999的numpy数组 np_arr np.arange(1000000) start time.time() # 记录当前时间 # Python 方式用列表推导式对每个元素求平方再用 sum() 求和 sum([x ** 2 for x in py_list]) print(fPython列表耗时{time.time() - start:.4f}s) # 耗时0.2591s start time.time() # NumPy 方式直接对整个数组做平方向量化运算再用 np.sum() 求和 np.sum(np_arr ** 2) # 采用f...格式化字符串{}里的内容会计算后进行嵌入到字符串里 # :是分隔符左边是格式化的值右边是格式化的格式也就是保留4位小数 print(fNumPy数组耗时{time.time() - start:.4f}s) # 耗时0.0109s2.ndarray介绍 -- numpy核心2.1 ndarray的核心特性多维性支持0维度1维度向量一维数组2维度矩阵,以及更高维度的数组同质性所有元素类型必须一致即使你定义时不一致最后也会类型上升统一到一致这样是为了快速计算可以通过dtype制定高效性基于连续的内存块进行存储支持向量化计算2.1.1 多维性支持0维度1维度向量一维数组2维度矩阵,以及更高维度的数组import numpy as np # 创建一个0维度的ndarry arr1 np.array(1) print(arr1.ndim)# 创建一个1维度的ndarrry arr2 np.array([1,2,3,4]) print(arr2.ndim)# 创建一个2维度的ndarray arr3 np.array([[1,2,3],[2,3,4]]) print(arr3.ndim)2.1.2 同质性所有元素类型必须一致即使你定义时不一致最后也会类型上升统一到一致这样是为了快速计算可以通过dtype制定# 制定类型进行创建 arr1 np.array([1,2,3],dtypenp.int64) print(arr1.dtype) arr1 np.array([1,2,3],dtypenp.int32) print(arr1.dtype) arr1 np.array([1,2,3],dtypenp.float64) print(arr1.dtype)# 即使数据类型不一致也会进行类型的转换 arr2 np.array([1,2,nihao]) print(arr2.dtype) # 整体转为U11类型就是11个固定长度的字符必须要保证每一个元素的字节一样才能高速计算 print(arr2)arr3 np.array([1,2,3.2]) print(arr3.dtype) # 整体转为float64类型 print(arr3)2.1.3 高效性基于连续的内存块进行存储可以随机读写数据支持向量化计算与广播特性2.2 ndarray属性shape: 数组的形状行数和列数或更高维度的尺寸。ndim: 维度数量数组是几维的1维、2维、3维等。size: 总元素个数数组中所有元素的总数。dtype: 元素类型数组中元素的类型整数、浮点数等。T: 转置行变列列变行。 不太常用itemsize: 单个元素占用的内存字节数。nbytes: 数组总内存占用量size * itemsize。flags: 内存存储方式是否连续存储高级优化。arr1 np.array([[1,2,3],[2,3,4]]) print(形状,arr1.shape) print(维度,arr1.ndim) print(size ,arr1.size) print(类型,arr1.dtype) print(转置,arr1.T) print(原数组,arr1)3 ndarray的创建主要有如下几类具体的应用场景如下1.基础构造 适用于手动构建小规模数组或复制已有数据。2.预定义形状填充 用于快速初始化固定形状的数组如全0占位、全1初始化。3.基于数值范围生成 生成数值序列常用于模拟时间序列、坐标网格等。4.特殊矩阵生成 数学运算专用如线性代数中的单位矩阵。5.随机数组生成 模拟实验数据、初始化神经网络权重等场景。6.高级构造方法 处理非结构化数据如文件、字符串或通过函数生成复杂数组。3.1 基础构造3.1.1 np.array()np.array()将列表/元组转换为 ndarray例np.array([[1, 2], [3, 4]])import numpy as np arr1 np.array([1,2,3,4]) print(arr1)[1 2 3 4]list [1,2,3,4,5] arr2 np.array(list) print(list)3.1.2 np.copy()np.copy() 创建独立副本深拷贝与原数组相同但不共享内存,就是又new了一个np.copy(arr)import numpy as np arr1 np.array([1,2,3,4]) arr2 np.copy(arr1) print(arr1) print(arr2) arr2[2] 5 # 进行修改又新生成的ndarray print(arr1) print(arr2)3.2 预定义形状填充3.2.1 np.zeros()作用根据传入的形状生成全0数组快速初始化全0数组调用np.zeros(传入形状) 例np.zeros((2,3))zeros_arr np.zeros((2,3)) print(zeros_arr) zeros_arr np.zeros((2,3),dtypenp.int64) # 指定类型 print(zeros_arr)[[0. 0. 0.] [0. 0. 0.]] [[0 0 0] [0 0 0]]3.2.2 np.ones()作用根据传入的形状生成全1数组快速初始化全1数组调用np.ones(传入形状) 例np.ones((2,3))ones_arr np.ones((2,3)) print(ones_arr) ones_arr np.ones((2,3),dtypenp.int64) print(ones_arr)[[1. 1. 1.] [1. 1. 1.]] [[1 1 1] [1 1 1]]3.2.3 np.empty()作用生成一个未初始化的数组主要进行预分配内存里面的值不是随机值而是未初始化的内存 — 直接拿分配到的内存块里原来的内容来用不做任何初始化。调用np.empty(传入形状) 例np.empty((2,3))empty_arr np.empty((2,3,5)) print(empty_arr)[[[1.25398642e-311 1.02765654e-321 0.00000000e000 0.00000000e000 1.16095442e-028] [5.02034658e175 1.65713486e-076 9.94952968e-043 1.93334423e184 1.60496009e-051] [1.50032769e-076 5.83278374e-144 3.59751658e252 3.96046095e246 1.04918621e-153]] [[7.69165785e218 5.04621343e180 1.04917822e-153 9.08366793e223 1.65713486e-076] [9.94952968e-043 1.93334423e184 1.60496009e-051 1.04917697e-153 1.94918966e-153] [1.10684845e-047 2.26301105e-076 2.10937826e-052 2.59027896e-144 7.79952704e-143]]]3.2.4 np.full()作用生成一个指定形状指定值的ndarray数组里面的值是指定的。调用np.full(传入形状,填充值) 例np.full((2,3),2)full_arr np.full((2,3),1) print(full_arr)[[1 1 1] [1 1 1]]3.3 基于数值范围生成3.3.1 np.arange()作用生成一个等差序列生成步长固定的序列左闭右开多使用生成[1,2,3,4,5]类似的数列使用np.arange(左起点右终点步长) 例np.arange(0, 10, 2)arange_arr np.arange(0,11,1) print(arange_arr)[ 0 1 2 3 4 5 6 7 8 9 10]3.3.2 np.linspace()作用生成一个等间隔序列生成制定数量的等间隔值左闭右闭使用np.linspace(左起点右终点数量) 例np.linspace(0, 10, 3) - [ 0. 5. 10.] 间隔值(10-0) / (3-1) 5linespace_arr np.linspace(0,10,5) print(linespace_arr)[ 0. 2.5 5. 7.5 10. ]3.3.3 np.logspace()作用生成一个生成对数间隔值生成制定数量的等间隔值左闭右闭使用np.linspace(左起点右终点数量底数) 例np.logspace(0, 2, 3, base10) - [ 1. 10. 100.] 间隔值(2-0) / (3-1) 1 - 0,1,2 - 100,101,10^2print(np.logspace(0, 2, 3, base10))[ 1. 10. 100.]3.4 特殊矩阵生成3.4.1 np.eye()作用生成一个单位矩阵使用np.eye(维度) 例np.eye(2)注意np.eye(行列) 也可以这样虽然不是单位矩阵但是包含一个最大的单位矩阵print(np.eye(2))[[1. 0.] [0. 1.]]print(np.eye(2,3))[[1. 0. 0.] [0. 1. 0.]]print(np.eye(3,2))[[1. 0.] [0. 1.] [0. 0.]]