日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

rstudio python_如虎添翼:用Python与C++扩展R语言的应用场景

發布時間:2024/9/18 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rstudio python_如虎添翼:用Python与C++扩展R语言的应用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

R語言是心理與統計學界中最受歡迎的編程語言之一。相比商業統計軟件,R語言免費、開源、擴展性強;而相比其他開源編程語言,R的基本操作相對簡單,統計與作圖模塊完善,適合進行統計分析工作。

然而,R語言并非沒有劣勢。首先,R程序包的覆蓋范圍沒有那么完美,在有些情況下可能會面臨“無R包可用”的情況。第二,R是一種腳本語言,而且許多底層運算模式沒有針對運算速度做出太多優化。因此,R的運行速度相對較慢,尤其在進行數據量較大的循環運算時,運行時間可能會達到編譯語言的數十倍。R的短處恰恰是其他編程語言的長處。例如,Python作為應用范圍最廣的腳本語言之一,在許多領域有更多的程序包支持;而C++作為一種編譯語言,在進行復雜運算時有明顯的速度優勢。幸好,R語言中提供了與Python和C++的協作程序包。利用這些程序包,我們可以把R處理起來較為困難的部分在另一種程序中運行,之后將運行結果反饋給R,在R中進行下一步分析。當然,為了完成這一任務,對參與協作的另一種語言也需要有一些基礎的了解。Python和C++入門知識超出了本文的范圍,對Python和C++還比較陌生的讀者可以在網上找一些相關的基礎資料。下面,我們會在兩種典型心理學使用場景中介紹R與Python、C++連接的程序包。R與Python的協作:reticulate基本信息reticulate是一個連接R與Python的程序包(官方網站如下)。https://rstudio.github.io/reticulate/我們可以使用這一程序包調用Python模塊的功能。reticulate的安裝方式和其他CRAN程序包一樣,可以直接通過install.packages命令來安裝:install.packages("reticulate")同時,為了調用Python模塊,我們還需要在計算機中裝好Python和需要的模塊,并將Python程序所在目錄放在PATH中。之后,就可以采用reticulate的import功能來導入模塊,并使用“$”符號代替“.”進行Python的面向對象編程。(ps.?這個包的名稱來自于東南亞的一種蟒蛇網紋蟒?reticulated python,估計當時作者為了找一個r開頭的蛇的名字也是費了些心思……)應用示例我曾經遇到過的一個使用場景是這樣:在一個皮膚電研究中,我需要從acq文件里讀取皮膚電信號的源數據,并進行一些后續處理。然而,我只找到了一個可以讀取acq文件的Python包:bioread。因此,我需要借助Python中的bioread包(如下)將數據讀入,之后用R進行下一步處理。https://pypi.org/project/bioread/使用的代碼如下(事先需要安裝Python和bioread包):library(reticulate)bioread "bioread") acqfile $read_file(acqfile # 查看acq文件對象信息# AcqKnowledge file (rev 132): 4 channels, 2000.0 samples/secacqfile$channels # 查看acq文件中的通道# [[1]]# Channel EDA filtered, differentiated: 123787 samples, 2000.0 samples/sec, loaded: True# # [[2]]# Channel EKG - ERS100C: 61893 samples, 1000.0 samples/sec, loaded: True# # [[3]]# Channel RESP - RSP100C: 241 samples, 3.90625 samples/sec, loaded: True# # [[4]]# Channel EDA - GSR100C: 123787 samples, 2000.0 samples/sec, loaded: Trueacqdata1 $channels[[1]]str(acqdata1)# num [1:123787(1d)] -101 -101 -101 -101 -101 ...#可以看到,從Python對象中提取的acqdata1已經是一個R向量了。#因此,之后都可以直接使用R語言對其進行分析#例如:mean(acqdata1)# [1] -110.7604需要注意的是,只有Python中一些特定種類的對象可以被轉換成R語言變量。reticulate官網上給出的對照表如下:

因此,對于一些Python模塊中自行定義的對象,需要提取出上述種類的子數據才能繼續用R做處理。(例如,在上述示例中,acqfile是一個AcqKnowledge file對象,不能直接使用R語言進行處理;但acqfile$channels[[1]]$data就是一個常規的數組了,可以直接轉化成R中的向量。)R與C++的協作:Rcpp基本信息Rcpp是最受歡迎的R語言擴展包之一(官方網站如下)。http://www.rcpp.org/我們可以使用這一程序包在R中調用C++函數。Rcpp同樣可以直接通過install.packages命令來安裝:install.packages("Rcpp")同時,我們還需要安裝C++編譯器。對于windows用戶,直接安裝Rtools即可。https://cran.r-project.org/bin/windows/Rtools/index.html要注意的是,使用Rcpp通常需要我們自己寫出一個符合Rcpp要求的C++函數,對編程知識的要求相比reticulate要高一些。應用示例我遇到過的Rcpp使用場景是這樣:我需要做一個心理模型的模擬,其中包含數億次量級的迭代計算。這一工作可以使用R函數實現,但需要的運行時間太長,超出了接受范圍。因此,我將這一函數使用Rcpp重寫。示例代碼如下(為簡明起見,這里使用了一個非常簡單的迭代函數):*add_one_zh.cpp*#include?using?namespace?Rcpp;//在函數開始之前的部分,(#include?,using?namespace?Rcpp;,//[[Rcpp::export]])//是C++和Rcpp需要的一些頭文件。//如果在RStudio中創建新C++文件,RStudio會自動生成這些頭文件。//[[Rcpp::export]]NumericVector add_one(int time) {//這個函數會計算一個向量,其中第一個元素是0,之后每個元素相對上一個元素增加1//注意:C++中的注釋開頭是“//”//C++中,所有變量的類型和函數返回值的類型都需要主動聲明 (例如NumericVector)。//每一句代碼要以分號結束//而且數組序號從0開始//NumericVector是Rcpp中的一種數據類型。//使用這種類型,可以保證函數返回值可以被轉化成R向量。NumericVector x(time+1); x(0) = 0; for(int i = 1; i <= time; i++){ x(i) = x(i-1) + 1; } return x;}*R程序*library(Rcpp)sourceCpp("add_one_zh.cpp") #將Rcpp函數導入R中t1add_one(100000000) # 運行Rcpp函數t2t2-t1 # 計算運行時間# Time difference of 1.545115 secs#相同功能的R函數add_one_slow x){ y "integer", y[1] = 0 for(i in 1:x+1){ y[i] y[i- } return(y)}t1add_one_slow(100000000) # 運行Rcpp函數t2t2-t1 # 計算運行時間# Time difference of 18.90944 secs從運行時間可以看出,本例中實現相同功能的C++函數比R函數快了十倍有余。結語本文對R語言中連接Python和C++的兩個程序包reticulate和Rcpp做了簡單介紹。利用Python和C++的優勢,我們可以擴展R程序可以應用的程序包,加快R語言的運行速度。以上介紹方法只是R語言擴展方式中的很小一個部分,還有許多其他的功能等待大家發現。感興趣的朋友可以參考上述程序包官網上的手冊和相關指導文件。祝大家寫代碼愉快!本文涉及代碼https://github.com/Sciurus365/RPyCpp其他資料Advanced R中Rcpp相關的章節:http://adv-r.had.co.nz/Rcpp.html另一本Rcpp的參考書籍:Rcpp for everyone https://teuder.github.io/rcpp4everyone_en/
作者信息:崔競蒙 Radboud University行為科學碩士研究生排版:李昊往期精選
  • 大話Python第2期——基礎入門2

  • 大話Python第1期——Python基礎入門

  • 用R進行多層中介的完整流程:從數據預處理到置信區間的生成

  • R語言和Jspsych編寫本地和在線心理學實驗和問卷教程

  • R-studio 中少為人知的秘技

  • ...

重要通知小伙伴們,感謝您瀏覽到這里 。我們在每周六晚八點準備了優質且精彩的學術資源分享,如果您不想錯過,我們強烈建議您將“荷蘭心理統計聯盟”設為星標,三步搞定!第一步:點擊頂部藍色字體“荷蘭心理統計聯盟”,進入我們公眾號的主頁;第二步:點擊頁面右上角“...”,彈出選項卡;第三步:點擊“設為星標”。

總結

以上是生活随笔為你收集整理的rstudio python_如虎添翼:用Python与C++扩展R语言的应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲自拍p | 欧美精品乱码久久久久久按摩 | 国产绳艺sm调教室论坛 | 天天操一操| 国产sm调教视频 | 99re久久精品国产 | 成人福利视频导航 | 欧美日韩国产传媒 | 91激情网 | 巨乳美女在线 | 成人乱人乱一区二区三区一级视频 | 人人妻人人澡人人爽人人精品 | 蜜臀久久99精品久久久画质超高清 | 九九热精品在线视频 | 熟女俱乐部五十路六十路av | 手机看片日韩日韩 | 成人日批视频 | 日韩作爱视频 | 国产精品久久久久久久一区探花 | 亚洲欧洲一区二区在线观看 | 激情综合五月网 | 黑人巨大精品欧美一区二区 | 日本人体一区 | 亚洲看片网 | 深夜福利成人 | 色久综合 | 国产口爆吞精一区二区 | www.超碰在线 | 国产区高清 | 老外黄色一级片 | 中国国产精品 | 亚洲精品小视频 | 欧美色一区二区三区在线观看 | 96亚洲精品久久久蜜桃 | 狠狠干一区二区 | 国产日产欧美一区二区三区 | 在线中文字幕网站 | 亚洲国产剧情在线观看 | 欧美黑人做爰爽爽爽 | 91福利片 | 永久av在线免费观看 | 亚州一区二区 | 欧美高清大白屁股ass18 | 亚洲精品乱码久久久久久麻豆不卡 | 亚洲网站视频 | 日本肉体xxxx裸体xxx免费 | 天天爽天天色 | 美女黄色影院 | www.日日干| 乱短篇艳辣500篇h文最新章节 | 一道本久久 | 性欧美video另类hd尤物 | 熟妇人妻一区二区三区四区 | 日韩免费网站 | 成人免费在线观看 | 久久综合色综合 | 99ri精品| 日韩免费av在线 | 老熟妇高潮一区二区三区 | 久久精品一级片 | 韩国av在线 | 免费一区二区三区四区 | 亚洲精品无吗 | 水密桃av| 欧美福利电影 | 亚洲福利精品 | 免费一区二区 | 色多多污 | 久久综合色综合 | 欧美一级视频 | 黄色免费看片 | 男女午夜激情 | 99精品人妻少妇一区二区 | 91国内精品视频 | 91免费国产| 国内成人精品视频 | 成人动漫av在线 | 日本国产三级xxxxxx | 国产做爰免费视频观看 | 国产freexxxx性播放麻豆 | 嫩模一区二区三区 | 欧美日韩伊人 | www.av72| 性xxxx欧美老肥妇牲乱 | av在线有码 | 精产国品一二三产品蜜桃 | 国产一级免费大片 | 日韩欧美一区二区免费 | 扒下小娇妻的内裤打屁股 | 欧美a久久 | 黄色电影在线视频 | www.九色 | 超碰美女在线 | 91精品在线一区 | 欧美精品乱码99久久蜜桃 | 久久精选 | 另类老妇性bbwbbw图片 | 久久成人精品一区二区 | 国产人人干 |