2.Python numpy笔记(利用数组进行快速向量化运算)
2018-11-07 本文已影响0人
Louis_Duan
1 matplotlib(工具包)
使用numpy进行数组运算,并调用其他Python库来实现硬件交互。其核心是一套由对象构成的绘图API。
在matplotlib.pyplot
模块中有一套完全仿照MATLAB的函数形式的绘图接口。
from numpy import *
from matplotlib.pyplot import *
1.1 scatter画散点图
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None, verts=None,
edgecolors=None, hold=None, data=None, **kwargs)
s:调节形状的大小,当s的长度和x一样时,表示x中的每一个点对应s中的一个点。
c:调节形状的颜色,可以是一个序列,
marker:形状
linewidth:线宽
2. random模块
2.1 Python中的random模块
random.random():用于生成一个0到1的随机浮点数,区间左闭右开
random.uniform(a,b):用于生成一个指定范围内的随机浮点数,两边都是闭区间
random.randint(a,b):用于生成一个指定范围内的整数,两边都是闭区间
random.randrange([start],stop[,step]):从指定范围内,按指定基数递增的集合中获取一个随机数。
random.choice(sequence):从序列中获取一个随机元素。
random.shuffle():将一个列表中的元素打乱。
random.sample(sequence,k):从指定序列中随机获取指定长度片段,不会修改原有序列。
2.2 numpy 中的random
numpy.random.seed()与numpy.random.RandomState(),两者实现的作用是一样的,都是使每次生成的随机数一样。
>>> import numpy as np
>>> np.random.seed(10)
>>> np.random.rand(8)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388, 0.49850701,
0.22479665, 0.19806286, 0.76053071])
>>> np.random.seed(10)
>>> np.random.rand(8)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388, 0.49850701,
0.22479665, 0.19806286, 0.76053071])
numpy.random.rand(d0, d1, d2, d3,...dn):以给定的形状创建一个数组,并在数组中加入在[0,1]之间
均匀分布的随机样本。
numpy.random.randn(d0, d1, d2, d3,....dn):以给定的形状创建一个数组,数组元素来符合标准正态
分布N(0,1)。
numpy.random.randint() :生成在左闭右开区间上离散均匀分布的整数值。
numpy.random.random_integers() :生成在左右两边都是闭区间上离散均匀分布的整数值。
numpy.random.random_sample() :以给定形状返回0,1之间(左闭右开)的随机浮点数
numpy.random.choice(a,size=None,replace=True,p=None)
numpy.random.choice() :若a为数组,则从a中选取元素;若a为单个int类型数,则选取range(a)中的数
replace是bool类型,为True,则选取的元素会出现重复;反之不会出现重复 p为数组,里面存放选到每个数
的可能性,即概率 。
3 生成数组的函数
arange()左闭右开
arange([start,] stop[, step,], dtype=None)
产生一个在区间 [start, stop) 之间,以 step 为间隔的数组
linspace()左闭右闭
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False,
dtype=None
在指定的间隔内返回均匀间隔的数字。返回num均匀分布的样本,在[start, stop]。
num:产生数据的个数。
endpoint:默认为True,包括断点。为‘False’时,不包括最后的端点。
retstep:默认为False,不显示步长。
4 数组属性方法总结
4.1 基本属性
a.dtype 数组元素类型 float32,uint8,...
a.shape 数组形状 (m,n,o,...)
a.size 数组元素数
a.itemsize 每个元素占字节数
a.nbytes 所有元素占的字节
a.ndim 数组维度
4.2 形状相关
a.flat 所有元素的迭代器
a.flatten() 将多维数组转化为一维数组,返回一个1维数组的复制
a.ravel() 返回一个1维数组,高效
a.resize(new_size) 改变形状
a.reshape() 它不会修改原来数组的值,而是返回一个新的数组
a.swapaxes(axis1, axis2) 交换两个维度的位置
a.transpose(*axex) 交换所有维度的位置
a.T 转置,转置返回的是对原数组的另一种view,所以改变转置会改变原来数组的值。
a.transpose()
a.squeeze() 去除所有长度为1的维度
a.diagonal() 返回数组a的对角线
4.3 填充复制
a.copy() 返回数组的一个复制
a.fill(value) 将数组的元组设置为特定值
4.4 转化
a.tolist() 将数组转化为列表
a.tostring() 转换为字符串
a.astype(dtype) 转化为指定类型
a.byteswap(False) 转换大小字节序
a.view(type_or_dtype) 生成一个使用相同内存,但使用不同的表示方法的数组
4.5 复数
a.imag 虚部
a.real 实部
a.conjugate() 复共轭
a.conj() 复共轭(缩写)
4.6 保存
a.dump(file) 将二进制数据存在file中
a.dump() 将二进制数据表示成字符串
a.tofile(fid, sep="",format="%s") 格式化ASCⅡ码写入文件
4.7 查找排序
a.nonzero() 返回所有非零元素的索引
a.sort(axis=-1) 沿某个轴排序,对于二维数组,默认相当于对每一行进行排序:
a.argsort(axis=-1) 沿某个轴,返回按排序的索引
a.searchsorted(b) 返回将b中元素插入a后能保持有序的索引值
4.8 元素数学操作
a.clip(low, high) 将数值限制在一定范围内
a.round(decimals=0) 近似到指定精度,decimals=1,保留一位小数
a.cumsum(axis=None) 累加和
a.cumprod(axis=None) 累乘积
4.9 约简操作
a.sum(axis=None) 求和,axis可以指定沿哪个方向进行求和
a.prod(axis=None) 求积
a.min(axis=None) 最小值
a.max(axis=None) 最大值
a.argmin(axis=None) 最小值索引
a.argmax(axis=None) 最大值索引
a.ptp(axis=None) 最大值减最小值
a.mean(axis=None) 平均值
a.std(axis=None) 标准差
a.var(axis=None) 方差
a.any(axis=None) 只要有一个不为0,返回真,逻辑或
a.all(axis=None) 所有都不为0,返回真,逻辑与
5 choose 函数实现条件筛选
np.choose(a, choices, out=None, mode='raise'):按照序号a对choices中的数进行选择。
>>control = np.array([[1,0,1],
[2,1,0],
[1,2,2]])
>>np.choose(control, [10, 11, 12])
>>array([[11, 10, 11],
[12, 11, 10],
[11, 12, 12]])
6 数组读写
对于文本文件,推荐使用
loadtxt
genfromtxt
savetxt
对于二进制文本文件,推荐使用
save
load
savez
6.1 数组的读取
loadtxt函数
loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None,
skiprows=0, usecols=None, unpack=False, ndmin=0)
genfromtxt函数
能处理更多的情况,但相应的速度和效率会慢一些。
genfromtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None,
skiprows=0, skip_header=0, skip_footer=0, converters=None,
missing='', missing_values=None, filling_values=None, usecols=None,
names=None, excludelist=None, deletechars=None, replace_space='_',
autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None,
usemask=False, loose=True, invalid_raise=True)
参数说明
delimiter: 按照指定格式分割字符,缺省值为任何空白字符,如空格、制表符(\t)
autostrip: 默认情况下,当一行被分解为一系列字符串时,各个条目不会被删除前导或者尾随的空格。通过
将autostrip设置为True,可以覆盖此行为。
comments: 用于定义标记注释开始的字符串。默认为'#'开始。忽略注释标记后的任何字符。
fname: 要读取的文件名
skiprows: 要跳过的行数,可以用来读写含有标题的文本
usecols(0,2) 是指只使用0,2两列
unpack: 把每列当成一个向量输出,而不是合并在一起
converters: 对数据进行预处理converters={0:add_one},表示第零列使用函数
add_one进行预处理
skip_header: 跳过开头的特定行数
skip_footer: 跳过倒数的特定行数
names: 当其值为True时,就算标题被注释掉,也会从第一行读取名称
missing_values: 标记缺失的值
filling_values: 替换已标记的缺失的值
6.2 将数组写入文件
savetxt
numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='',
comments='# ', encoding=None)
6.3 numpy二进制格式
数组可以储存为二进制格式,单个的数组保存为.npy格式,多个数组保存为.npz格式。
保存方法:
save(file, arr) 保存单个数组,.npy 格式
savez(file, *args, **kwds) 保存多个数组,无压缩的 .npz 格式
savez_compressed(file, *args, **kwds) 保存多个数组,有压缩的 .npz 格式
读取方法:
load(file, mmap_mode=None) 对于 .npy,返回保存的数组,对于 .npz,返回一个名称-数组
对组成的字典。