机器学习入门-2

构造全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查看类型

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值