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)	    # (四舍五入取整)