一、numpy文件存取
一、数据的CSV文件存取
CSV是常用逗号作为分隔
存
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
- frame:文件,字符产生器, .gz or .bz2的压缩文件
- array:存入的文件数组
- fmt:写入文件的格式,例如%d,%.2f,%。18e
- delimiter:分隔字符串,默认是空格
如对于数组a
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
取
np.savetxt(frame,dtype=np.float,delimiter=None,unpack=False)
- frame:文件,字符产生器, .gz or .bz2的压缩文件
- dtype:数据类型,可选
- delimiter:分隔字符串,默认是空格
- unpack:如果是true,读入属性分别写入不同变量
e.g.
b=np.loadtxt('a,csv',dtype=np.int,delimiter=',')
局限性:上述两个代码只能存取一维和二维数组
二、多维数据的存取
存
a.tofile(frame,sep='',format='%s')
- frame:文件,字符串
- sep:数据分隔字符串,如果是空串,写入文件为二进制
- format:写入数据的格式
e.g.
a.tofile("b.dat",sep=",",format='%d')
若sep为空,存入结果如下
取
np.fromfile(frame,dtype=float,count=-1,sep='')
- frame:文件,字符串
- dtype:读取数据类型,可选
- count:读入元素个数,-1代表读入整个文件
- sep:数据分隔字符串,如果是空串,写入文件为二进制
e.g.
a=np.arrange(24).reshape(2,3,4)
a.tofile("b.dat",sep=",",format="%d")
c=np.fromfile("b.dat",dtype=np.int,sep=",").reshape(2,3,4)
注:该方法需要记住存入数据的维度和元素类型以便重新生成
三、numpu的便捷文件存取
np.save(fname,array) or np.savez(fname,array)
np.load(fname)
扩展名为.npy
二、numpy函数
一、numpy的随机数函数
np.random.**
rand(d0,d1,...,dn) | 根据d0-dn创建随机数组,浮点数,[0,1),均匀分布 |
randn(d0,d1,...,dn) | 根据d0-dn创建随机数组,标准正态分布 |
randint(low[,high,shape]) | 根据shape创建随机整数数组,范围是[low,high) |
seed(s) | 随机种子 |
suffle(a) | 根据数组a的第一轴进行随机排列 |
permutation(a) | 根据数组a的第一轴产生新的乱序数组,不改变数组 |
choice(a[size,replace,p]) | 从一维数组中以概率p抽取元素,形成size形状的新数组,replace表示是否可以重用元素,默认为False |
uniform(low,high,size) | 产生均匀均匀分布的数组 |
normal(loc,scale,size) | 产生均匀正态分布的数组,loc是均值,scale是标准型 |
poisson(lam,size) | 产生具有泊松分布的数组,lam是随机事件发生率 |
a=np.random.rand(2,3,4)
b=np.random.randint(100,200,(3,4))
二、numpy的统计函数
np.**
sum(a,axix=None) | 计算给定轴的总和 |
mean(a,axix=None) | 计算给定轴的期望 |
average(a,axix=None,weight=None) | 计算给定轴的加权平均值 |
std(a,axix=None) | 计算给定轴的标准差 |
var(a,axix=None) | 计算给定轴的方差 |
min(x) max(x) | 计算数组元素中的最小最大值 |
argmin(x) argmax(x) | 得到x中最小最大值的索引 |
unravel_index(index,shape) | 根据shape将一维下标id转换为多维下标 |
ptp(x) | 计算数组x中最大最小值的差 |
median(x) | 计算数组x中的中位数 |
三、numpy梯度函数
np.gradient(f)
计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
下面附上课程中实例代码(图像的手绘效果):
from PIL import Image
import numpy as np
a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')
depth = 10. # (0-100)
grad = np.gradient(a) #取图像灰度的梯度值
grad_x, grad_y = grad #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
vec_az = np.pi/4. # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响
dz = np.sin(vec_el) #光源对z 轴的影响
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化
b = b.clip(0,255)
im = Image.fromarray(b.astype('uint8')) #重构图像
im.save('./beijingHD.jpg')
知识点来自(欢迎补充和更正):
Python数据分析与展示_北京理工大学_中国大学MOOC(慕课)