构造全0、1、任意数矩阵
import numpy as np
a=np.zeros(shape=10,dtype=float)
a=np.zeros(shape=[10,12],dtype=float)
b=np.ones(10)
b=np.ones([10,12])
c=np.full(10,fill_value=100)#写100的话默认是int
c=np.full([10,12],fill_value=100,dtype=float)
随机数
range(start,end,stride)stride不可以是浮点数
np.arange(start,end,stride)stride可以是浮点数
np.linspace(start,end,nums)包括end
np.random.randint(low,high,size)前闭后开
np.random.seed(1)如果想每次random后的结果相同,每次random前都要使用相同的seed
np.random.random()默认生成01之间的浮点数,不过这些浮点数是01之间均与分布的
np.random.random(size)
如果想取正太分布的随机数可用
np.random.normal()默认生成01之间的正态分布的浮点数
np.random.normal(loc,scale,size)
random.uniform(0., 12., size=13)0-12之间的随机数13个
x.ndim查看维数
x.shape查看形状
x.size查看元素个数
切片x[strat,end,stride]矩阵反转x[::-1,::-1]
在list中取子数组,对原数组或者子数组改变元素都不对另一个产生影响
但是在np.array中会,用.copy()就不会了
.reshape()不改变自身需要有别的来接收
resize改变自身
矩阵拼接
x=np.array([1,2,3])
y=np.array([4,5,6])
z=np.array([7,8,9])
np.concatenate([x,y,z])#ndim要相同
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.concatenate([a,a],axis=1)
Out[22]:
array([[ 0, 1, 2, 0, 1, 2],
[ 3, 4, 5, 3, 4, 5],
[ 6, 7, 8, 6, 7, 8],
[ 9, 10, 11, 9, 10, 11],
[12, 13, 14, 12, 13, 14]])
np.concatenate([a,a],axis=0)
Out[23]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14],
[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14]])
np.hstack([x,y])#ndim可不相同
array([1, 2, 3, 4, 5, 6])
np.vstack([x,y])
array([[1, 2, 3],
[4, 5, 6]])
矩阵分割
x=np.arange(10)
x1,x2,x3=np.split(x,[3,7])3,7是分割点
x1 array([0, 1, 2])
x2 array([3, 4, 5, 6])
x3 array([7, 8, 9])
行axis=0第一个维度
x=np.arange(15).reshape(3,5)
np.split(x,[2])
[array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]),
array([[10, 11, 12, 13, 14]])]
np.split(x,[2],axis=1)
[array([[ 0, 1],
[ 5, 6],
[10, 11]]),
array([[ 2, 3, 4],
[ 7, 8, 9],
[12, 13, 14]])]
up,low=np.vsplit(x,[2])
left,right=np.hsplit(x,[2])
up
Out[34]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
low
Out[35]: array([[10, 11, 12, 13, 14]])
left
Out[36]:
array([[ 0, 1],
[ 5, 6],
[10, 11]])
right
Out[37]:
array([[ 2, 3, 4],
[ 7, 8, 9],
[12, 13, 14]])
np.array()矩阵之间的运算
加减乘(*)除平方取余数倒数等都是对应元素进行运算,这些矩阵shape要相同
数学定义的矩阵运算时.dot()
A.T转置
矩阵和向量之间的运算
矩阵+向量:每行加矩阵,对应元素的运算,推广,矩阵的每最高维—1和另一个矩阵运算
矩阵*向量:对应元素运算
矩阵.dot(向量)数学定义的运算,不过np.array是智能的会自动把一个向量看成列向量或者行向量
求逆:np.linalg.inv(A)
伪逆矩阵:AA-1=A-1A=单位阵np.linalg.pinv(A)
np中的np.sum,np.max,np.min等聚合运算要比python自带的快
np.prod(A+1)A每个元素+1后相乘
np.mean()
np.median()
np.var()方差
np.std()标准差
np.percentile(x,25) Out[46]: 3.5 意思是x中有不超过25%的数小于 3.5
取索引操作:np.agrmin(),np.argmax(),np.argsort()
np.random.shuffle()乱序处理
np.partition(A,3)返回的是左边比3小,右边比3大,后续可进行切片等操作
fancy indexing:x[A],x[A,B],A,B可以是索引,或者布尔数组
np中的比较:x<3每个元素都和3比较最后返回一个布尔数组,2*x==4*x-30 这样也可以
np.sum(x<3)
np.any(x==0)只要存在就返回 True
np.all(...)所有才 True
python中&&->and ||->or
x=x[x%2==0]
x=x[x[:,-1]%3==0,:]取最后一列是3的倍数的行
由于sklearn接收的是numpy,所以一般使用pandas对数据进行预处理然后转化为numpy
matplotlib基础
绘制折线图
from matplotlib import pyplot as plt
x=np.linspace(0,10,100)
plt.plot(x,np.sin(x),color='r',label='...')
plt.plot(x,np.cos(x),color='g',label='...')
有了label可以加上plt.legend()就会有图示小框
#调节下x,y的范围
plt.xlim()
plt.ylim()
plt.axes([a,b,c,d])a,b是x轴的范围,c,d是y轴范围
#x,y轴label
plt.xlabel('x')
plt.ylabel('y')
#给图取名字
plt.title('...')
绘制散点图
plt.scatter(x,y,color,alpha,marker='o'/'+'/+'*')alpha透明度
x=np.random.normal(0,1,10000)
y=np.random.normal(0,1,10000)
plt.scatter(x,y,alpha=0.61)
axis表示压缩,axis=0表示行,压缩掉行只剩一行,axis=1表示列,压缩掉列只剩一列
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
np.sum(x,axis=0)
Out[40]: array([15, 18, 21, 24, 27])
np.sum(x,axis=1)
Out[41]: array([10, 35, 60])
for循环比生成表达式慢很多
%timeit 多次测试取平均值,一句话 %%timeit一个单元
%time 测试一次,一句话 %%time一个单元
list的元素可以是任何类型,所以比较灵活,但是要对每个元素检查具体是何种类型,效率低
import array
array.array限定元素类型,但是它只把数据元素当作数组来看,没有引入向量和矩阵的相关运算
np.array限定元素类型, 引入向量和矩阵的相关运算
对于整型array赋值浮点型会有截断,所以需要查看dtype查看类型