亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何不用安裝python就能在.NET里調(diào)用Python庫(kù)

 更新時(shí)間:2019年07月12日 09:26:56   作者:千鋒Python唐唐君  
這篇文章主要介紹了如何不用安裝python就能在.NET里調(diào)用Python庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

Pythonnet這個(gè)屌爆的項(xiàng)目的出現(xiàn),使得我們可以用一種新的方式,讓C#可以和Python之間進(jìn)行互操作。但是它的設(shè)置和部署可能有點(diǎn)問(wèn)題,真的是這樣嗎?

本文我會(huì)介紹Python.Included這個(gè)項(xiàng)目,它不但優(yōu)雅的解決了這個(gè)問(wèn)題,并且讓.NET開(kāi)發(fā)者可以輕松愉快的讓.NET與Python進(jìn)行互操作。作為概念的證明,我將使用Numpy.Net進(jìn)行展示,它是一個(gè).NET標(biāo)準(zhǔn)庫(kù),它為Python的Numpy提供了一個(gè)強(qiáng)類(lèi)型API,并且使用它并不需要在Windows上安裝Python。


開(kāi)發(fā)人員從Numpy.NET的強(qiáng)類(lèi)型API中獲益,與動(dòng)態(tài)API不同,后者支持Visual Studio的IntelliSense功能,可以顯示原始的Numpy文檔。

問(wèn)題是什么?

每個(gè)人可能都安裝了不同版本的Python,有一些人用Python 2.7,其他一些人用Python 3.5,3.6甚至3.7。當(dāng)你使用pythonnet的時(shí)候,針對(duì)Python的每個(gè)小版本,它必須使用不同的配置進(jìn)行編譯,而且該版本的Python必須安裝,這樣代碼才可以運(yùn)行。所以如果你在團(tuán)隊(duì)里工作,每個(gè)人就必須配置完全相同的Python環(huán)境。但拿我們的SciSharp團(tuán)隊(duì)來(lái)說(shuō),情況就已經(jīng)不是這樣的了。如果你想部署你的.NET應(yīng)用,你首先必須部署Python,從開(kāi)發(fā)人員角度來(lái)講,這很鬧心。

然而,如果你正在搞機(jī)器學(xué)習(xí)和人工智能,盡管微軟和SciSharp都付出了很大努力,但目前你還是無(wú)法完全避免Python的使用。如果你看一下正在使用pythonnet的項(xiàng)目的列表,你會(huì)發(fā)現(xiàn)很多AI領(lǐng)域的公司當(dāng)前都在使用.NET與Python進(jìn)行連接。

Python.Included 前來(lái)救援

如果你可以很簡(jiǎn)單的引用一個(gè)Nuget包,并在無(wú)需手動(dòng)修改的情況下,一切都會(huì)自動(dòng)的配置好,假如可以達(dá)到這種程度,你會(huì)感覺(jué)怎么樣?這就是我創(chuàng)建Python.Included的愿景,Python.Included可以把packages python-3.7.3-embed-amd64.zip包含在它的程序集里,這這樣就允許你可以通過(guò)Nuget來(lái)有效的引用Python了。為了證明它能正常工作,并可以快速提供所有的NumSharp中仍然缺少的Numpy功能,我創(chuàng)建了基于Python.Included的Numpy.NET這個(gè)項(xiàng)目。

概念驗(yàn)證:Numpy.NET

Numpy.NET為Numpy提供了強(qiáng)類(lèi)型的包裝函數(shù),這意味著您完全不需要使用dynamic關(guān)鍵字,但這部分我會(huì)在另一篇文章中深入討論。今天的重點(diǎn)是介紹 Numpy.NET 如何使用 Python.Included 來(lái)按需自動(dòng)部署Python和Numpy以便對(duì)它們進(jìn)行調(diào)用。

這是Numpy將在幕后實(shí)際執(zhí)行的設(shè)置代碼。這些都不需要你來(lái)操作。一旦你使用了它的一個(gè)函數(shù):

var a = np.array(new [,] {{1, 2}, {3, 4}});,

Numpy.dll 就會(huì)設(shè)置好嵌入的Python發(fā)行版,而它是從你本機(jī)home目錄里的程序集里解壓縮出來(lái)的(如果還沒(méi)安裝過(guò)的話)。

var installer = new Python.Included.Installer();
installer.SetupPython(force:false).Wait();

下一步(如果在之前的運(yùn)行中還沒(méi)完成)它將解壓縮 numpy pip wheel,而numpy pip wheel 是作為嵌入的資源打包到了Numpy.dll里的并其安裝到了Python安裝文件里。

installer.InstallWheel(typeof(NumPy).Assembly, "numpy-1.16.3-cp37-cp37m-win_amd64.whl").Wait();

最后,pythonnet運(yùn)行時(shí)被初始化了,Numpy也被導(dǎo)入進(jìn)來(lái)了,可供后續(xù)使用。

PythonEngine.Initialize();
Py.Import("numpy");

這些都是在幕后發(fā)生的,使用Numpy.dll的用戶(hù)根本不用擔(dān)心本地的Python安裝。事實(shí)上,即使您已安裝了任何版本的Python也無(wú)所謂。

性能注意事項(xiàng)

大家都知道pythonnet比較慢,因此您可能會(huì)問(wèn)自己,使用pythonnet將Python庫(kù)與.NET接在一起是否真的是一個(gè)好主意。一如既往,這要看情況而定。

我的測(cè)試結(jié)果表明,與直接從Python調(diào)用Numpy相比,使用.net調(diào)用numpy的開(kāi)銷(xiāo)大約是它的4倍。需要澄清一下,這并不意味著Numpy.NET比python中的numpy慢四倍,這僅僅意味著通過(guò)pythonnet調(diào)用Numpy會(huì)有額外的開(kāi)銷(xiāo)。當(dāng)然了,由于Numpy.NET調(diào)用的是Numpy,Numpy函數(shù)本身的執(zhí)行時(shí)間是完全相同的。

開(kāi)銷(xiāo)是否是一個(gè)問(wèn)題完全取決于實(shí)際用例。如果您在一個(gè)嵌套循環(huán)中不斷的在CLR和Python之間來(lái)回切換,那就可能會(huì)遇到問(wèn)題。但大多數(shù)Python庫(kù)的設(shè)計(jì)都都是為了提高效率,避免數(shù)據(jù)循環(huán)。Numpy允許您只使用一個(gè)調(diào)用就可以對(duì)數(shù)百萬(wàn)的數(shù)組元素進(jìn)行操作。Pytorch和Tensorflow允許您完全在GPU上執(zhí)行操作。因此,如果正確使用,與處理大量數(shù)據(jù)時(shí)操作的執(zhí)行時(shí)間相比,互操作開(kāi)銷(xiāo)可以忽略不計(jì)。

路線圖

我知道現(xiàn)在有很多把Numpy移植到.NET上的方案和項(xiàng)目,例如使用IronPython。但是IronPython項(xiàng)目仍然只支持Python 2.7,而且項(xiàng)目進(jìn)展非常緩慢。這就導(dǎo)致了依賴(lài)于python 3的庫(kù)不能通過(guò)IronPython來(lái)獲得和使用,而且這種情況在近期也不會(huì)有什么改變。

我的重點(diǎn)是通過(guò)pythonnet為.NET提供更多的機(jī)器學(xué)習(xí)和人工智能庫(kù)。SciSharp團(tuán)隊(duì)也在討論如何研發(fā)出一個(gè)更快版本的pythonnet,從而避免使用天性緩慢的DynamicObject。

請(qǐng)嘗試一下Numpy.NET,并讓我知道它為你做了什么并且做的如何。如果有任何意見(jiàn)或建議,我將不勝感激,我希望我的工作能夠幫助.NET機(jī)器學(xué)習(xí)社區(qū)成長(zhǎng)和繁榮。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何用Python編寫(xiě)一個(gè)電子考勤系統(tǒng)

    如何用Python編寫(xiě)一個(gè)電子考勤系統(tǒng)

    這篇文章主要介紹了用Python編寫(xiě)一個(gè)電子考勤系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python sys模塊sys.path使用方法示例

    python sys模塊sys.path使用方法示例

    這篇文章主要介紹了python sys模塊sys.path使用方法,大家參考使用
    2013-12-12
  • Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼

    Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python3.5裝飾器典型案例分析

    Python3.5裝飾器典型案例分析

    這篇文章主要介紹了Python3.5裝飾器,結(jié)合實(shí)例形式分析了裝飾器修飾有參數(shù)函數(shù)、裝飾器修飾函數(shù)參數(shù)等情況相關(guān)使用技巧,需要的朋友可以參考下
    2019-04-04
  • 淺析Python3 pip換源問(wèn)題

    淺析Python3 pip換源問(wèn)題

    這篇文章主要介紹了Python3 pip換源問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Django Rest framework頻率原理與限制

    Django Rest framework頻率原理與限制

    這篇文章主要介紹了Django Rest framework頻率原理與限制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python網(wǎng)絡(luò)爬蟲(chóng)采集聯(lián)想詞示例

    python網(wǎng)絡(luò)爬蟲(chóng)采集聯(lián)想詞示例

    這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲(chóng)采集聯(lián)想詞示例,需要的朋友可以參考下
    2014-02-02
  • python之驗(yàn)證碼生成(gvcode與captcha)

    python之驗(yàn)證碼生成(gvcode與captcha)

    這篇文章主要介紹了python之驗(yàn)證碼生成(gvcode與captcha),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Matlab讀取excel并利用拉依達(dá)準(zhǔn)則篩選數(shù)據(jù)的全過(guò)程

    Matlab讀取excel并利用拉依達(dá)準(zhǔn)則篩選數(shù)據(jù)的全過(guò)程

    在Excel中錄入好數(shù)據(jù)以后經(jīng)常需要被matlab讀取,具體該如何讀取并進(jìn)行篩選呢?下面這篇文章就來(lái)給大家介紹了關(guān)于Matlab讀取excel并利用拉依達(dá)準(zhǔn)則篩選數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 一款Python工具制作的動(dòng)態(tài)條形圖(強(qiáng)烈推薦!)

    一款Python工具制作的動(dòng)態(tài)條形圖(強(qiáng)烈推薦!)

    有時(shí)為了方便看數(shù)據(jù)的變化情況,需要畫(huà)一個(gè)動(dòng)態(tài)圖來(lái)看整體的變化情況,下面這篇文章主要給大家介紹了一款Python工具制作的動(dòng)態(tài)條形圖的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論