numpy
拥有广播机制, 通过扩展数组的方法来实现相加、相减、相乘等操作 。可以条件掩码,也可以索引掩码。
创建ndarray数组
a = np.array([1, 2, 3, 4, 5, 6])
np.arange(起始值(0),终止值,步长(1))
a = np.arange(0, 5, 1)
b = np.arange(0, 10, 2)
np.zeros(数组元素个数, dtype='类型')
a = np.zeros(10)
np.ones(数组元素个数, dtype='类型')
a = np.ones(10)
np.ndarray.shape # 数组的维度
np.ndarray.dtype # 元素的类型
np.ndarray.size # 数组元素的个数
数据类型
类型名 | 类型表示符 |
布尔型 | bool_ |
有符号整数型 | int8(-128~127) / int16 / int32 / int64 |
无符号整数型 | uint8(0~255) / uint16 / uint32 / uint64 |
浮点型 | float16 / float32 / float64 |
复数型 | complex64 / complex128 |
字串型 | str_,每个字符用32位Unicode编码表示 |
复合数据类型数组
# 自定义复合类型
import numpy as np
data=[('zs', [90, 80, 85], 15),
('ls', [92, 81, 83], 16),
('ww', [95, 85, 95], 15)]
#第一种设置dtype的方式
a = np.array(data, dtype='U3, 3int32, int32')
#第二种设置dtype的方式
b = np.array(data, dtype=[('name', 'str_', 2), ('scores', 'int32', 3),
('ages', 'int32', 1)])
#第三种设置dtype的方式
c = np.array(data, dtype={'names': ['name', 'scores', 'ages'],
'formats': ['U3', '3int32', 'int32']})
#测试日期类型数组
f = np.array(['2011', '2012-01-01', '2013-01-01 01:01:01','2011-02-01'])
f = f.astype('M8[D]')
f = f.astype('int32')
数据变维
# 视图变维(数据共享):
reshape() 与 ravel()
b = a.reshape(2, 4) #视图变维 : 变为2行4列的二维数组
d = c.ravel() #视图变维 变为1维数组
# 复制变维(数据独立):
flatten()
e = c.flatten()
M=e.reshape(2,10)
# 就地变维:直接改变原数组对象的维度,不返回新数组
a.shape = (2, 4)
a.resize(2, 2, 2)
多维数组的组合与拆分
垂直方向操作:
import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
# 垂直方向完成拆分操作,生成两个数组
d, e = np.vsplit(c, 2)
水平方向操作:
# 水平方向完成组合操作,生成新数组
c = np.hstack((a, b))
# 水平方向完成拆分操作,生成两个数组
d, e = np.hsplit(c, 2)
深度方向操作:(3维)
# 深度方向(3维)完成组合操作,生成新数组
i = np.dstack((a, b))
# 深度方向(3维)完成拆分操作,生成两个数组
k, l = np.dsplit(i, 2)
长度不等的数组组合:
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4])
# 填充b数组使其长度与a相同
# pad_width是在各维度的各个方向上想要填补的长度,前面填充0位,后面填充一位,值为-1
b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
多维数组组合与拆分的相关函数:
# 通过axis作为关键字参数指定组合的方向,取值如下:
# 若待组合的数组都是二维数组:
# 0: 垂直方向组合
# 1: 水平方向组合
# 若待组合的数组都是三维数组:
# 0: 垂直方向组合
# 1: 水平方向组合
# 2: 深度方向组合
np.concatenate((a, b), axis=0)
# 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
np.split(c, 2, axis=0)
数组的掩码操作
# 可以索引掩码,也可以数据掩码
import numpy as np
a = np.arange(1, 10)
mask = [True, False,True, False,True, False,True, False,True, False]
res = a[mask]
数组计算通用函数
np.add(a, a) # 两数组相加
np.add.reduce(a) # 返回一个累加和
np.add.accumulate(a) # 返回累加和过程
np.prod(a) #返回数组累积值
np.cumprod(a) #返回数组累乘的过程数组
np.add.outer([10, 20, 30], a) # 外和
np.outer([10, 20, 30], a) #外积
数组取整通用函数
np.divide(a, b) # a 除 b的值
np.floor(a / b) # (结果向下取整)
np.ceil(a / b) # (结果向上取整)
np.trunc(a / b) # (结果截断取整)
np.round(a / b) # (四舍五入取整)