电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

解決python調(diào)用matlab時的一些常見問題

瀏覽:7日期:2022-06-24 10:34:25
為什么要用python調(diào)用matlab?

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

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

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

但是摸索過程中發(fā)現(xiàn)一些問題,在網(wǎng)絡(luò)上基本找不到,自己全靠摸索發(fā)現(xiàn)解決方式,寫在這里,如果能給大家?guī)韼椭蔷秃芎昧恕?/p>配置python以調(diào)用matlab的APIpython環(huán)境

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

通過mlab庫

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

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

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

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

mlab包的優(yōu)點

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

mlab包的缺點

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

除非重啟電腦。

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

通過matlab.engine

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

安裝過程:

1、在matlab安裝路徑中,找到”R2016bexternenginespython”,每個人安裝路徑不一樣,找到末尾一致路徑即可

2、這里注意區(qū)分,通過anaconda prompt打開其命令行,依次執(zhí)行:d: ?>cd D:Program FilesMATLABR2016bexternenginespython,即切換路徑到matlab的python的setup.py下

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

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

#coding=utf-8import matlab.enginefrom 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)點

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

matlab.engine包的缺點

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

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

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

實用建議

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

matlab中的函數(shù)返回到python中的值默認為1個,需要在函數(shù)中增加一個參數(shù)nargout=n,如果n與返回的個數(shù)不一致,python會報錯。

總結(jié)

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

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

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

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

補充:python調(diào)用matlab問題解決小建議

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

cmd進行build和install時需要管理員權(quán)限運行

多個版本的情況下,需要使用python、python2、python3進行python2 setpy.py build這樣

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

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

需要保證你的函數(shù)或腳本就在當(dāng)前的工作路徑下,也就是說要把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]))

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

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

我們可以人為指定輸出參數(shù)為0個來避免這樣的錯誤。

eng.hanshu(canshu, nargout=2)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 广东青藤环境科技有限公司-水质检测| 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 光环国际-新三板公司_股票代码:838504| 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 成都思迪机电技术研究所-四川成都思迪编码器 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 扬州汇丰仪表有限公司| 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 温州在线网| 间甲酚,间甲酚厂家-山东祥东新材料 |