pthon数据
标签(空格分隔): Python
ndarray数组的维度变换
.reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape):与.reshape功能相同,但是改变原数组的
.swapaxes(ax1,ax2):将数组n个维度中两个维度进行调换
.flatten():对数组进行降维,返回折叠后的一维数组,原数组不变
数组的类型变换
new_a=a.astype(new_type):改变元素类型,程序自动调节np.int不同具体到int8,int16,int32;
.astype实际上做的是一个复制,即使新的类型与原来的类型一样,也复制了一份
ndarray数组向python列表的转变
ls=a.tolist()
数组的索引与切片
一维数组
a=np.array([9,8,7,6,5])
a[2]
7
python列表的两种索引方法在这里都可以用
a[1:4:2]
array([8,6])
[起始编号:终止编号(不含):步长]
多维数组的索引
a=(
[[0,1,2,3],
[4,5,6,7],
8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]
)
a[1,2,3]
23a[-1,-2,-3]
17
多维数组切片
a=(
[[0,1,2,3],
[4,5,6,7],
8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]
)
a[::,0:2,::]
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[12, 13, 14, 15],
[16, 17, 18, 19]]])
多维数组的切片和一维数组切片在每一个维度上都一样,每个维度之间用逗号隔开
ndarray数组的运算
数组与标量之间的运算
相当与数组中的每一个元素都与该标量进行运算
a=(
[[0,1,2,3],
[4,5,6,7],
8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]
)
a.mean()//a的算数平均值
11.5
a/a.mean()
array(
[[[ 0. , 0.08695652, 0.17391304, 0.26086957],
[ 0.34782609, 0.43478261, 0.52173913, 0.60869565],
[ 0.69565217, 0.7826087 , 0.86956522, 0.95652174]],
[[ 1.04347826, 1.13043478, 1.2173913 , 1.30434783],
[ 1.39130435, 1.47826087, 1.56521739, 1.65217391],
[ 1.73913043, 1.82608696, 1.91304348, 2. ]]])
一维数组的一元函数
np.abs()/np.fabs()//计算数组各元素的绝对值
np.sqrt()//计算数组各元素的平方根
np.square()//计算数组各元素的平方
np.log()/np.log10()/np.log2()//计算数组各元素的自然对数,10为底和2为底的对数
np.ceil()/np.floor()//计算数组各元素的ceiling值和floor值(ceil表示不超过的整数值,floor表示小于这个数的最大整数值)
np.rint()//四舍五入值
np.modf()//将数组的小数和整数部分以两个数组的形式返回
np.cos()/np.cosh()/np.sin()/np.sinh()/np.tan()/np.tanh()//计算数组各元素的普通型和双曲三角函数
np.exp()//指数值
np.sign()//计算数组各元素的符号值,+(1),-(-1),0
一元函数运算一定要注意数组是否被只是改变
Numpy二元函数
+,-,,/,*//加减乘除乘方(两个数组对应元素相加)
np.maximum(x,y)/np.minimum(x,y)//元素级的最大最小值(数据类型不同的话选用精度高的)
np.mod(x,y)//元素级的模运算
np.copysign(x,y)//将数组Y中的各元素的符号赋值给数组x的对应元素
<,>,>=,<=,==,!=//算数比较,产生布尔型数组
数据的CSV文件的存取
写入
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None)
frame:文件、字符串或者产生器,可以是.gz或.bz2的压缩文件。
array:存入的数组
fmt:写入文件中每个元素的格式,%d %.2f %.18e(默认)
delimiter:分割字符串,默认空格,由于Numpy使用逗号,所以要改为逗号
读入
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame:文件、字符串或者产生器,可以是.gz或.bz2的压缩文件
umpack:如果为Ture,读入属性讲分别写入不同的变量
csv文件局限性,只能有效存储一维和二维数组
多维数组的存取
写入
a.tofile(frame,sep=”,format=’%s’)
sep:数据分割字符串,如果是空串,写入文件为二进制
format:数据写入格式
读入
fromfile(frame,dtype=float,count=-1,sep=”)
count:读入元素的个数
sep:如果为空,表示为二进制文件
Numpy的便捷文件存取
np.saave(fname,array)/np.savez//存储文件默认以.npy为扩展名,压缩扩展名为.npz
np.load(fname)//与上相同
Numpy随机数函数
Numpy中的random子库
- rand(d0,d1,d2,~,dn):根据d0-dn创建随机数数组,浮点数,[0,1),均匀分布,d1~dn是表示维度
- randn(d0,d1,~,dn):创建随机数组,标准正态分布,对称轴为0
- randint(low,high,shape):根据shape创建随机整数或随机数数组,范围是[low,high]
- seed(s):随机种子,s是给定的种子值
高级随机数函数
- shuffle(a):根据数组a的第一轴进行随机排列,改变数组x
不产生新的数组,所以不能进行赋值操作,不会返回数组
- permutation(a):与shuffle功能相同,不改变数组x
- choice(a,size,replace,p):replace默认为False,表示不可以重复从a中抽取
np.random中的分布随机函数
- uniform(low,high,size):均匀分布,size形状,范围[low,high]
- normal(loc,scale,size):正态分布,loc均值,scale标准差,size形状(均值为对称轴,标准差为幅度)
- poisson(lam,size):泊松分布,lam随机事件发生概率
np的统计函数
- sum(a,axis=None):求和函数,axis表示指定维度求和
- mean(a,axis=None):数学期望
- average(a,axis=None,weight=None):加权平均值
- std(a,azis=None):标准差
- var(a,axis-None):方差
- min(a)/max(a):最大最小值
- argmin(a)/argmax(a):最大最小值下标
- unravel_index(index,shape):根据shape将一维index转换为多维下标
- ptp(a):最大最小值得差
- median(a):中位数
Numpy的梯度函数
- np.gradient(f):梯度:斜率
图像的数组表示
- RGB数组表示
PIL库,Python Image Library 处理图像的专业库
pip install pillowfrom PIL import Image(类)
图像是一个由像素组成的二位矩阵,每个元素是RGB值
from PIL import Image
import Numpy as np
im=np.array(Image.open(“D:/beijing.jpg”))
print(im.shape,im.dtype)
图像的变换
Eg:
from PIL import Image
import Numpy as np
a=np.array(Image.open(“D:/beijing.jpg”))
b=[255,255,255]-a
im=Image.fromarray(b.astype(‘uint8’))
im.save(“D:/beijing2.jpg”)
- 主要变换在于b=[255,255,255]-a这句话
- a=np.array(Image.open(“D:/beijing.jpg”).convert(‘L’))这句话能将原来彩色图片对应的三维数组变为二位数组,即将彩色图片变为灰度图片
plt的plot函数
plt.plot(x,y,format_string,**kwargs)
- x:x轴数据
- y:y轴数据
- format_string:控制曲线的格式字符串
- **kwarges:第二组或更多(X,Y,format_string
绘制多条曲线
a=np.arange(10)
plt.plot(a,a*1.5,a,a*2.5,a,a*3.5,a,a*4.5)
plt.show()
format_string:颜色字符+风格字符+标记字符
- 颜色字符:’b’蓝色/’r’红色
- 风格字符:’-‘实线/’–’破折线/’-.’点划线/’:’虚线/””无条线
- 标记字符:’.’/’,’/’o’/’v’/’^’/’*’/’s’
plt.plot(a,a*1.5,'go-',a,a*2.5,'rx-',a,a*3.5,a,a*4.5)
pyplot的中文显示
matplotlib.rcParams[]:(全局)
- font.familyc:字体名
- font.style:字体风格,正常‘normal’,斜体’italic’
- font.size:字体大小,整数字号或’large’/’X-small’
matplotlib.rcParams[font.family]='STSong'
matplotlib.rcParams[font.size]=20
fontproperties属性(局部)
plt.xlabel('时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('振幅',fontproperties='SimHei',fontsize=20)
文本显示
- plt.xlabel():x轴文本
- plt.ylabel():y轴文本
- plt.title():图形整体
- plt.text():任意位置,(X,Y)指定文本位置
- plt.annpotate(s,xy=arrow_crd,xytext=text,arrowprops=dict)
在图形中增加带箭头的注视,s表示注解字符串,xy箭头所在位置,xytext文本显示位置,dict属性
import numpy as np
import matplotlib.pyplot as plt
a=np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.xlabel('时间',fontproperties='SimHei',color='green')
plt.ylabel('振幅',fontproperties='SimHei',color='green')
plt.title('正弦函数图像',fontproperties='SimHei',color='green')
plt.text(2,1,)
plt.axis(-1,6,-2,2)
plt.grid(Ture)//加入网格曲线
plt.show()
pyplot子绘图区域
plt.subplot2grid(GridSpace,CurSpec,colspan=1,rowspan=1)
plt.subplot12grid((3,3),(1,0),colspan=2)
GridSpec类
from matplotlib import gridspec
gs=gridspec.GridSpec(3,3)
ax1=plt.subplot(gs[0,:])
ax2=plt.subplot(gs[1:,-1])
#pyplot基础图表函数
+ plt.plot(x,y,fmt,):坐标图
+ plt.boxplot(data,notch,position):箱形图
+ plt.bar(left,height,width.botton):条形图
+ plt.barh(width,bottom,left,height):横向条形图
+ plt.polar(theta,r):极坐标图
+ plt.pie(data,explode):饼状图
+ plt.psd(x,NFFT=256,pad_to,Fs):功率谱密度图
+ plt.specgram(x,NFFT=256,pad_to,F):谱图
+ plt.cohere(x,y,NFFT=256,Fs):X-Y相关性函数
+ plt.scatter(x,y):散点图
+ plt.step(x,y,where):步阶图
+ plt.hist(x,bins,normed):直方图
+ plt.conture(X,Y,Z,N):等值图
+ plt.vlines():垂直图
+ plt.stem(x,y,linefmt,markerfmt):柴火图
+ plt.plot_date():数据日期
#饼图绘制
import matplotlib.pyplot as plt
labels='Frogs','Hogs','Dogs','Logs'
size=[15,30,45,60]
explode=(0,0.1, 0,0)
plt.pie(size,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=90)
plt.show()
直方图绘制
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu,sign=100,20
a=np.random.normal(mu,sign,size=100)
plt.hist(a,20,normal=1,histtype='stepfilled',facecolor='b',alpha=0.75)//20表示直方的个数
plt.title('Histogram')
plt.show()
极坐标图
import numpy as np
import matplotlib.pyplot as plt
N=20
theta=np.linspace(0.0,2*np.pi,N,endpoint=False)
radii=10*np.random.rand(N)
width=np.pi/4*np.random.rand(N)
ax=plt.subplot(111,projection='polar')
bars=ax.bar(theta,radii,width=width,bottom=0.0)
for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r/10.))
bar.set_alpha(0.5)
plt.show()
padas中的Series类
- 自动索引
import pandas as pd
a=pd.Series([9,8,7,6])
a
Out[4]:
0 9
1 8
2 7
3 6
dtype: int64
- 自定义索引
import pandas as pd
b=pd.Series([9,8,7,6],index=['a','b','c','d'])
b
Out[8]:
a 9
b 8
c 7
d 6
dtype: int64
##创建类型
标量
s=pd.Series(25,index=['a','b','c']) s Out[10]: a 25 b 25 c 25 dtype: int64
- 字典
d=pd.Series({'a':9,'b':8})
d=pd.Series({'a':9,'b':8,'c':7},index=['c','a','b'])
- ndarray
a=pd.Series(np.arange(5),index=np.arange(9,4,-1))
- 列表
基本操作
d.index
Out[15]: Index(['b', 'sunhanwu'], dtype='object')
d.value