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,返回一个名称-数组
                               对组成的字典。
上一篇下一篇

猜你喜欢

热点阅读