长征路,numpy站

numpy(√) & Pandas & Scipy

首先奉出RUNoob。站在巨人的肩膀上~

  1. arrange:返回数组的列表,将其转化为numpy的数组,从0开始到给定数字结束的自然数
    用法如:求列表每个元素的平方
    np.arrange(n)**2,0-(n-1)的每个数字都求平方
  2. 两个数组a、b相加,直接使用a+b
  3. 核心对象:array数组,元素的类型必须是同一个。数组使用[]
  4. array的属性:
    shape:m*n的数组
    ndim:维度的数目,行数
    size:所有数据元素的数目
    dtype:元素类型
  5. 创建数组:
    python的列表list和嵌套列表创建array
    numpy形式:arrange、ones/ones_like(数组全为1)、zeros/zeros_like(数组全为0)、empty/empty_like(权威空)、ful/full_like(指定数值)、eye(单位矩阵)
    生成随机数的np.random模块构建
  6. array支持的操作函数
    逐元素的加减乘除
    面向多维的数组索引
    聚合函数:sum/mean
    线性代数函数:求逆矩阵、求解方程组
  7. arrange语法:np.arrange([start,]stop[,step],dtype=None),开始数字、结束数字(不包含)、步长
    ones语法:np.ones(shape,dtype=None,order=‘C’),shaoe可以是一个数:2,可以是一个元祖:(2,3),表示多维向量
    ones_like语法:ones_like(a,dtype=float,order=‘C’),其中a是np.array,该语句用于创建与a相同的形状的全是1的数组
    zeros、zeros_like、empty/empty_like同ones、ones_like
    full语法:np.full(shape,fill_value,dtype=None,order=‘C’),其中full_value是填充数字,shape一个是数字、可以是元祖
    full_like同其他like
    random语法:np.random.randn(d0,d1…dn),d0…dn分别表示:行,列,块…具体数字表示几行、几列、几块…
  8. reshape(n,m):将数组重塑为n*m的矩阵
  9. 加减乘、sin、exp、argsort
    加: 数组+num/数组:每个数字加num/数组
    减: 数组-num/数组:每个数字减num/数组
    乘: 数组*num:每个数字乘num
    sin:np.sin(数组),对每个元素求sin
    exp:np.exp(数组),e的数组中每个元素的次方
    argsort:arr.argsort(),对数组进行排序
  10. 按索引查询,索引类型:基础索引、神奇索引、布尔索引
    基础索引:
    一维数组:下标index;用冒号的切片(-1代表最后一个,依此类推-2代表倒数第二个,0代表第一个,切片结果不包含最后一个数字的位置),
    二维数组:下标[x,y];切片[x:y,z:w],其中数组可以省略
    神奇索引:使用数字列表取想要获得的列或行,如x[[2,3,4]]取2、3、4行的所有列,x[:,[2,3,4]]为取2、3、4列的所有行;同时指定行和列的时候定位到指定元素,所输出为一个一维数组。
    布尔索引:arr>num:返回数组中每个数字是否大于num,返回值为一组true+false。使用arr[arr>num]可以筛选大于num的数字;其他使用arr[arr>num]=0、arr[arr<=num]=1,可以实现数据的标注;还可以使用自增降 :x[x<num]+=20;条件组合查询(每个条件都要加小括号):(x%2==0)| (x>7)
  11. numpy的随机函数

在这里插入图片描述
randint中size可以是一维:size(5,),可以是多维:size(2,3,4),维数使用元祖形式表示
choice的a是数组的时候,所生成元素全部来源于a
shuffle应用于二维数组的时候,只会将行的位置交换,行内元素不变化
permutation会更改原来arr,会返回一个新的copy
uniform:均匀分布
随机数可以用于加入噪声

  1. np.linspace(-10,10,100),开始数字:-10,结束数字:10,数字个数:100
  2. 数学统计函数:
函数描述
sum
prod所有元素的乘积
cumsum从该元素向前加,跨行
cumprod从该元素向前乘,跨行
min、
max、
percentile0-100百分位数;eg:np.per。centile(arr,[25,50,75])分别取25%、50%、75%的数字
quantile0-1分位数;eg:np.quantile(arr,[0.25,0.50,0.75])分别取25%、50%、75%的数字
median中位数
average加权平均,参数可以指定weights:np.average(arr,weights=np.random.rand(*arr.shape)),权重矩阵的shape需要和arr相同
mean
std
var
  1. 轴:axis=0:行,axis=1:列
    当使用sum/mean/media等聚合函数时,axis=0代表把行消解掉(跨行计算),axis=1代表吧列消解掉(跨列计算),此处同pandas
  2. 标准化:同pandas,(A-np.mean(A,axis=0))/np.std(A,axis=0)
  3. 广播:矩阵A-B,B的维数(如只有1行)与A不相同,将B的行数复制为同A相同的行数
  4. 挑选符合条件的数字,直接使用数组跟数字进行比较,语法:arr[arr>num]
  5. 一维数字升维
    方法:np.newaxis,newaxis是关键字,使用索引的语法给数组添加维度,默认为none。需要添加行维度,语法:arr[np.newaxis,:];添加一个列维度,语法:arr[:,np.newaxis]
    np.expand_dims(arr,axis):方法,同上方功效,给arr再axis位置添加维度,axis=0为行,axis=1为列,语法:np.expand_dims(arr,axis=0),相当于上方在行写一个np.newaxis
    np.reshape(a,newshape):方法,给一个维度(newshape中行的位置或列的位置)设置为1完成升维.。另一个维度长度未知时使用:-1,让numpy自己算出共多少维
  6. 数据合并:添加行(样本数据),添加列(特征)
    方法:np.concatenate(array_list,axis=0/1),沿着制定axis进行数组合并
    np.vstack或者np.row_stack(array_list):垂直vertically,按row wise进行数据合并
    np.hstack或者np.comlumn_stack(array_list):水平horizontally、按conlumn wise进行数据合并
    其中:添加新行:np.concatenate(array1,arr2) 和np.vstack(arr1,arr2)np.row_stack(array1,arr2)效果相同。
    添加新列:np.concatenate(array1,arr2,axis=1) 和np.hstack(arr1,arr2)np.column_stack(array1,arr2)效果相同。
  7. 逆矩阵求解线性方程组
    逆矩阵:np.linalg.inv(arr)
    矩阵乘法:A@B 或 np.matmul(A,B)
  8. 结构化数组: 相当于数据库中定义数据的类型,或c语言中的结构体
    如,存储学生姓名、年龄、体重的二维表格
    复合结构:new_dtype = np.dtype([(‘name’,‘U10’),(‘age’,‘i4’),(‘weight’,‘f8’)]),其中U=unicode,i=int,f=float
    赋值:arr=np.array([(‘ming’,30,55.2),(‘gang’,20,56),(‘li’,32,67)],dtype=new_dtype),两个参数,一个是数组,一个是类型。
    若使用切片或下标进行寻找,返回数据以一组数据为一条进行返回。
    当使用索引名字(如name)进行寻找,则返回索引名对应的所有数据。
    当使用条件进行查询,eg:arr[arr[“age”]>20],组合条件进行查询:arr[(arr[“age”]>20) &(arr[“weight”]>80) ]
    对逐列进行计算:arr[“age”]+=1,每个age都会加1
  9. numpy与pandas的相互转化
    numpy---->pandas
    pd.Series(arr)将numpy的arr转化为pandas的series(series每个数据都对应一个索引)
    pd.DataFrame(arr,columns=[“columnName1”,“columnName2”,“columnName3”,…])
    pandas---->numpy
    series.values 或 series.to_numpy()
    df.values 或 df.to_numpy() 数据是经过处理后的
  10. numpy+sklearn(传统机器学习)
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.llinear_model import LinearRegression
#导入数据
data,target = datasets.load_boston(return_X_y=True)
#分割训练集,验证集
x_train,x_test,y_train,y_test = train_test_split(data,target)

#训练线性回归模型
#构造线性回归对象
clf = LinearRegression()
#执行训练
clf.fit(x_train,y_train)
#在训练集上打分
clf.score(x_train,y_train)

#评估模型和使用模型
#在测试集上打分
clf.score(x_test,y_test)
#使用测试集进行预估
clf.predict(x_test)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值