numpy概述
- Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
- Numpy是其它数据分析及机器学习库的底层库。
- Numpy完全标准C语言实现,运行效率充分优化。
- Numpy开源免费。
numpy历史
- 1995年,Numeric,Python语言数值计算扩充。
- 2001年,Scipy->Numarray,多维数组运算。
- 2005年,Numeric+Numarray->Numpy。
- 2006年,Numpy脱离Scipy成为独立的项目。
numpy的核心:多维数组
- 代码简洁:减少Python代码中的循环。
- 底层实现:厚内核(C)+薄接口(Python),保证性能。
ndarray 数组
用np.ndarray类的对象表示n维数组
1 | import numpy as np |
内存中的ndarray对象
元数据(metadata)
存储对目标数组的描述信息,如:ndim、shape、dtype、data等。
实际数据
完整的数组数据
将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。
数组对象的特点
- Numpy数组是同质数组,即所有元素的数据类型必须相同
- Numpy数组的下标从0开始,最后一个元素的下标为数组长度减1,同python的列表。
数组对象的创建
np.array(任何可被解释为Numpy数组的逻辑结构)
1 | import numpy as np |
np.arange(起始值(0),终止值,步长(1))
1 | import numpy as np |
np.zeros(数组元素个数, dtype='类型')
1 | import numpy as np |
np.ones(数组元素个数, dtype='类型')
1 | import numpy as np |
对象属性的基本操作
数组的维度:np.ndarray.shape
1 | import numpy as np |
元素的类型:np.ndarray.dtype
1 | import numpy as np |
数组元素的个数:np.ndarray.size
1 | import numpy as np |
数组元素索引(下标)
数组对象[…, 页号, 行号, 列号]
下标从0开始,到数组len-1结束。
1 | import numpy as np |
对象属性操作详解
Numpy的内部基本数据类型
类型名 | 类型表示符 |
---|---|
布尔型 | bool_ |
有符号整数型 | int8(-128~127) / int16 / int32 / int64 |
无符号整数型 | uint8(0~255) / uint16 / uint32 / uint64 |
浮点型 | float16 / float32 / float64 |
复数型 | complex64 / complex128 |
字串型 | str_,每个字符用32位Unicode编码表示 |
日期类型 | datetime64 |
自定义复合类型:list of tuples
1 | # 自定义复合类型 |
类型字符码
类型 | 字符码 |
---|---|
np.bool_ | ? |
np.int8/16/32/64 | i1 / i2 / i4 / i8 |
np.uint8/16/32/64 | u1 / u2 / u4 / u8 |
np.float/16/32/64 | f2 / f4 / f8 |
np.complex64/128 | c8 / c16 |
np.str_ | U |
np.datetime64 | M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s] |
数组维度操作
视图变维(数据共享): reshape() 与 ravel()
1 | import numpy as np |
复制变维(数据独立):flatten()
1 | e = c.flatten() |
就地变维:直接改变原数组对象的维度,不返回新数组
1 | a.shape = (2, 4) |
数组索引操作
1 | # 数组对象切片的参数设置与列表切面参数类似 |
1 | import numpy as np |
多维数组的切片操作
1 | import numpy as np |
ndarray数组的掩码操作:之后的要学到的pandas包也经常使用
1 | import numpy as np |
多维数组的组合与拆分
垂直方向操作:vstack vsplit
1 | import numpy as np |
水平方向操作:hstack hsplit
1 | import numpy as np |
深度方向操作:dstack dsplit(3 维)
1 | import numpy as np |
长度不等的数组组合:pad+vstack/hstack/dstack
1 | import numpy as np |
多维数组组合与拆分的相关函数:concatenate split
1 | # 通过axis作为关键字参数指定组合的方向,取值如下: |
简单的一维数组组合方案:row_stack colomn_stack
1 | a = np.arange(1,9) #[1, 2, 3, 4, 5, 6, 7, 8] |
注:均分,份数需可整除。
类的其他属性
- shape - 维度
- dtype - 元素类型
- size - 元素数量
- ndim - 维数,len(shape)
- itemsize - 元素字节数
- nbytes - 总字节数 = size x itemsize
- real - 复数数组的实部数组
- imag - 复数数组的虚部数组
- T - 数组对象的转置视图
- flat - 扁平迭代器
1 | import numpy as np |