最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決python調(diào)用matlab時(shí)的一些常見(jiàn)問(wèn)題

 更新時(shí)間:2021年03月24日 11:17:59   作者:杭州卡耐基  
這篇文章主要介紹了解決python調(diào)用matlab時(shí)的一些常見(jiàn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

為什么要用python調(diào)用matlab?

我自己的有些數(shù)據(jù)結(jié)構(gòu)涉及到hash查找,在python中key是tuple形式,在matlab中支持hash查找的數(shù)據(jù)結(jié)構(gòu)只有containers.Map(),并不能支持cell作為key。

嘗試過(guò)把向量轉(zhuǎn)為string,但是num2str和str2mat的效率不高,containers.Map()的查找耗時(shí)也非常的長(zhǎng),所以只好作罷。

后來(lái)發(fā)現(xiàn)可以用python通過(guò)matlab的API直接調(diào)用matlab的函數(shù)參與運(yùn)算,朋友的經(jīng)驗(yàn)說(shuō)矩陣運(yùn)算都交給matlab來(lái)計(jì)算就很快了。

但是摸索過(guò)程中發(fā)現(xiàn)一些問(wèn)題,在網(wǎng)絡(luò)上基本找不到,自己全靠摸索發(fā)現(xiàn)解決方式,寫在這里,如果能給大家?guī)?lái)幫助,那就很好了。

配置python以調(diào)用matlab的API

python環(huán)境

這里以py2.7和Spyder的anaconda為例。

通過(guò)mlab庫(kù)

這個(gè)包直接搜索到官網(wǎng)上下載即可。也可以嘗試pip,我已經(jīng)忘了當(dāng)時(shí)怎么裝上的了。

裝好之后,使用示例如下:

from mlab.releases import latest_release as matlab
import os
path = os.getcwd()
mat.path(mat.path(),path) # 添加當(dāng)前腳本所在路徑到matlab的環(huán)境中
......

所有的matlab(包括自定義函數(shù))的可以通過(guò)matlab.xxxx()的方式調(diào)用。

mlab包的優(yōu)點(diǎn)

matlab中的所有變量都是矩陣形式的,到python中會(huì)自動(dòng)轉(zhuǎn)為numpy的array形式,非常方便。

mlab包的缺點(diǎn)

這是最大的BUG!那就是自定義函數(shù)在通過(guò)mlab在python中調(diào)用之后,就好像編譯只讀了一樣,此后對(duì).m文件的任何修改都不起作用,不管是重新啟動(dòng)python的kernel、重新啟動(dòng)spyder、重新import mlab、刪除.m文件重建同名函數(shù).m文件,都行不通。刪除了.m文件,python報(bào)錯(cuò),除非重新命名一個(gè)新函數(shù)后調(diào)用,那么這個(gè)新函數(shù)同樣面臨無(wú)法修改的問(wèn)題。

除非重啟電腦。

因此我選擇了另一個(gè)方式,也是matlab官網(wǎng)介紹的方式。

通過(guò)matlab.engine

matlab官網(wǎng)的鏈接:MATLAB API for Python。

安裝過(guò)程:

1、在matlab安裝路徑中,找到”R2016b\extern\engines\python”,每個(gè)人安裝路徑不一樣,找到末尾一致路徑即可

2、這里注意區(qū)分,通過(guò)anaconda prompt打開(kāi)其命令行,依次執(zhí)行:d: –>cd D:\Program Files\MATLAB\R2016b\extern\engines\python,即切換路徑到matlab的python的setup.py下

3、官方還給出了較全的安裝方案,跟著做就好:在非默認(rèn)位置安裝用于 Python 的 MATLAB 引擎 API

4、安裝完成后,python中就可測(cè)試以下內(nèi)容了:

#coding=utf-8
import matlab.engine
from numpy import *
if __name__ == '__main__':
 eng = matlab.engine.start_matlab()
 A = matlab.double([[1,2],[5,6]])
 print(type(A),A.size,A)
 print(eng.eig(A))
 eng.quit()
 pass

matlab.engine包的優(yōu)點(diǎn)

這是matlab官方介紹的方法,不會(huì)出現(xiàn)mlab的那種問(wèn)題,可以邊寫程序邊調(diào)試沒(méi)問(wèn)題了。

matlab.engine包的缺點(diǎn)

使用的變量中有許多的matlab類,其中一些在spyder的Variable explorer中無(wú)法顯示,必須人為打印。

另外就是必須注意python變量類型和matlab變量類型的對(duì)應(yīng)關(guān)系,matlab給出了一張表:Pass Data to MATLAB from Python。

我習(xí)慣上會(huì)把變量以list的方式 [1,2,3] 傳入到matlab的函數(shù)中,這樣matlab里面實(shí)際認(rèn)為是cell,調(diào)試中遇到了很多次,實(shí)際上如果只傳數(shù)值到函數(shù)中,需要在python中將變量設(shè)置為 matlab.double([1,2,3]) 傳入才正常。

實(shí)用建議

matlab.double類型的變量,可以通過(guò)numpy.asarray方式轉(zhuǎn)為array類型的變量,方便在python中處理。

matlab中的函數(shù)返回到python中的值默認(rèn)為1個(gè),需要在函數(shù)中增加一個(gè)參數(shù)nargout=n,如果n與返回的個(gè)數(shù)不一致,python會(huì)報(bào)錯(cuò)。

總結(jié)

官方介紹的matlab.engine更好用。

matlab負(fù)責(zé)處理矩陣計(jì)算,python用以解決hash查找的數(shù)據(jù)結(jié)構(gòu)。

目前還在開(kāi)發(fā)初期階段,并不知道數(shù)據(jù)在python和matlab之間的通信效率高不高。

第一次寫總結(jié),主要是為了給自己總結(jié)用,避免以后發(fā)生同樣的錯(cuò)誤??紤]到網(wǎng)絡(luò)上相關(guān)問(wèn)題的中文介紹非常少,能找到的都是抄過(guò)來(lái)抄過(guò)去的基礎(chǔ)配置問(wèn)題,我這里分享出來(lái),以期能夠幫助到其他朋友。

補(bǔ)充:python調(diào)用matlab問(wèn)題解決小建議

軟件及python位數(shù)要一致

cmd進(jìn)行build和install時(shí)需要管理員權(quán)限運(yùn)行

多個(gè)版本的情況下,需要使用python、python2、python3進(jìn)行python2 setpy.py build這樣

函數(shù)的參數(shù)一般需要matlab.double轉(zhuǎn)換或者參數(shù)賦值時(shí)直接改為double型

import matlab.engine
eng = matlab.engine.start_matlab()

需要保證你的函數(shù)或腳本就在當(dāng)前的工作路徑下,也就是說(shuō)要把m文件放到python程序中去

matlab.double([44100])
matlab.double([[1.0,1.4142135623730951,1.7320508075688772,2.0,2.23606797749979]])
signal = eng.hanshu(matlab.double([44100]), matlab.double([3000]), matlab.double([5]))

默認(rèn)情況下,API認(rèn)為接收函數(shù)返回結(jié)果的參數(shù)有1個(gè)。

這會(huì)導(dǎo)致沒(méi)有返回值的函數(shù)在被調(diào)用時(shí)報(bào)錯(cuò):“Too many output arguments”或是多個(gè)返回值的情況下只返回并得到第一個(gè)返回值

我們可以人為指定輸出參數(shù)為0個(gè)來(lái)避免這樣的錯(cuò)誤。

eng.hanshu(canshu, nargout=2)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Python+selenium實(shí)現(xiàn)趣頭條的視頻自動(dòng)上傳與發(fā)布

    Python+selenium實(shí)現(xiàn)趣頭條的視頻自動(dòng)上傳與發(fā)布

    本文主要介紹了通過(guò)Python+selenium實(shí)現(xiàn)趣頭條的短視頻自動(dòng)上傳與發(fā)布功能,同時(shí)支持抖音、快手、b站、小紅書(shū)等平臺(tái)的視頻自動(dòng)化同步發(fā)布。需要的朋友可以參考一下
    2021-12-12
  • pandas按條件篩選數(shù)據(jù)的實(shí)現(xiàn)

    pandas按條件篩選數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了pandas按條件篩選數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python利用lxml庫(kù)實(shí)現(xiàn)XML處理

    Python利用lxml庫(kù)實(shí)現(xiàn)XML處理

    lxml庫(kù)是Python中處理XML和HTML文檔的強(qiáng)大庫(kù),提供了豐富的API以進(jìn)行各種操作,本文將討論如何使用lxml庫(kù),包括如何創(chuàng)建XML文檔,如何使用XPath查詢,以及如何解析大型XML文檔,需要的可以參考下
    2023-08-08
  • django 解決manage.py migrate無(wú)效的問(wèn)題

    django 解決manage.py migrate無(wú)效的問(wèn)題

    今天小編就為大家分享一篇django 解決manage.py migrate無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python 如何用terminal輸入?yún)?shù)

    python 如何用terminal輸入?yún)?shù)

    這篇文章主要介紹了python 如何用terminal輸入?yún)?shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python特性語(yǔ)法之遍歷、公共方法、引用

    python特性語(yǔ)法之遍歷、公共方法、引用

    這篇文章主要介紹了python特性語(yǔ)法之遍歷、公共方法、引用的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • 解決編碼問(wèn)題:UnicodeDecodeError: 'utf-8' codec can't decod

    解決編碼問(wèn)題:UnicodeDecodeError: 'utf-8' codec

    這篇文章主要介紹了快速解決編碼問(wèn)題:UnicodeDecodeError: 'utf-8' codec can't decod,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)

    python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)

    超市管理系統(tǒng)有管理員和普通用戶兩條分支,只需掌握Python基礎(chǔ)語(yǔ)法,就可以完成這個(gè)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Django怎么在admin后臺(tái)注冊(cè)數(shù)據(jù)庫(kù)表

    Django怎么在admin后臺(tái)注冊(cè)數(shù)據(jù)庫(kù)表

    這篇文章主要介紹了Django怎么在admin后臺(tái)注冊(cè)數(shù)據(jù)庫(kù)表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化

    Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化

    這篇文章主要介紹了Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

嘉黎县| 仁布县| 邵阳市| 南江县| 那坡县| 姚安县| 手机| 浑源县| 高陵县| 台山市| 苍梧县| 尼勒克县| 神农架林区| 江口县| 龙山县| 阿巴嘎旗| 横山县| 喀喇沁旗| 合江县| 富平县| 湖南省| 冷水江市| 金门县| 玉山县| 桂东县| 特克斯县| 黑水县| 长白| 孟州市| 隆子县| 祁东县| 陇南市| 宜宾县| 沙雅县| 墨玉县| 桐乡市| 汉寿县| 陆河县| 津南区| 临漳县| 武威市|