用python建立以一个“laplace随机数矩阵生成函数”

前言:回归大作业用R做数值模拟,在生成服从Laplace分布随机数时碰了壁。于是我小脑袋瓜灵机一动,捣鼓半天在python中建了个函数,生成数据后导出再导入到了R中继续,还寻思着以后要是用到Laplace随机数还能重复利用呢!结果深更半夜收到了小翠大佬学弟的魔幻消息,原来r的包里自带有,气得我一气之下还是爬了起来打算记录一下我这一个小时搞出来的玩意,证明没有完全白干,多少有点收获(企图自我安慰

目录

1.R中生成Laplace随机数:(r版本不能过低)

2.python读取excel文件数据

3.python数据导出为xlsx(方法简单且比较笨)

4.R导入xlsx文件中的数据

5.实践过程


point:

1.R中生成Laplace随机数:(r版本不能过低)

install.packages("VGAM")
library(splines)
library(stats4)
library(VGAM)
rlaplace(100,0,0.8)

2.python读取excel文件数据

使用pandas:read_excel;储存为数组形式

import pandas as pd
path=r'文件路径.xlsx'
df=pd.read_excel(path,header=0) #header=0默认第一行为表头

3.python数据导出为xlsx(方法简单且比较笨)

import xlsxwriter

m      #假设m为一个100*1000维的矩阵

workbook=xlsxwriter.Workbook('random_laplace.xlsx')    #创建一个xlsx文件
wworksheet=workbook.add_worksheet('sheet1')            #创建一个工作表,可为空
#将矩阵中每个元素填入到工作表中
for i in range(100):                                  
    for j in range (1000):
        ws.write(i,j,m[i,j])
workbook.close()                                       #关闭该工作表

4.R导入xlsx(csv)文件中的数据

library(openxlsx)
#读取到data.frame中
read.xlsx(file, sheetIndex, sheetName=NULL,rowIndex=NULL,
          startRow=NULL, endRow=NULL, colIndex=NULL,
          as.data.frame=TRUE, header=TRUE)

#读取csv文件中的数据
#read.csv 其他参数类似,不需要额外导入包

step1:读取到dataframe中,第一行会默认为标题行。

默认header=TEUR,因而第一行会默认为标题行;如果不想使用第一行作为标题行,则header=FALSE

step2:读取后的数据类型,会转为数据框或者list形式,不能再直接做回归。

所以要将list-->numeric类型再做回归。

y_num<-unlist(y_list)

python中创建一个空矩阵(较难,直接建立一个维数对应的零矩阵再逐步删改)

matrix=np.zeros(shape=(n,m))

5.实践过程

1.python:“生成laplace随机数”函数

import numpy as np
import xlsxwriter

def random_laplace(nsample,repeat_time,miu,b):
    """
        生成服从拉普拉斯分布(双指数分布)随机数
        
        nsample:生成n个随机数
        repeat_time:重复生成次数
        miu,b:laplace分布的参数
        
        return:得到随机数矩阵
    """
    n=0
    #     创建一个空矩阵
    random_matrix=np.zeros(shape=(repeat_time,nsample))
    while n<repeat_time:
    #     生成拉普拉斯随机数
        random_matrix[n,:]=np.random.laplace(miu,b,nsample)
        n+=1
    return random_matrix

m=random_laplace(nsample,repeat_time,miu,b)

#将m保存到xlsx文件中
workbook=xlsxwriter.Workbook('random_laplace.xlsx')
ws=workbook.add_worksheet()
for i in range(1000):
    for j in range (100):
        ws.write(i,j,m[i,j])
workbook.close()

2.在R中读取并运行

library(openxlsx)
r_laplace<-read.xlsx("F:/个人嘿嘿嘿/北师大BNU/研一上-课业资料/应用多元线性回归/hw01大作业/laplace_random.xlsx")

xdata<-c(……)
ydata_l<-y_real+r_laplace[i,]   #提取第i行的随机数作为误差项加入到y

#将list转化为numeric        
ydata_laplace<-unlist(ydata_l)

fit_ols<-lm(ydata_laplace~xdata)

猜你喜欢

转载自blog.csdn.net/qq_59613072/article/details/127418984