首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更快的方法从python运行这个matlab脚本?

有没有更快的方法从python运行这个matlab脚本?
EN

Stack Overflow用户
提问于 2021-09-21 22:31:03
回答 1查看 83关注 0票数 0

我将这个变量保存为.mat文件。然后,我在python中运行一个matlab脚本,该脚本运行一个以"latent_var“作为输入的经过训练的克里金模型。kriging模型(在matlab中)输出"comp_vals",这是一个1x25的双精度变量,然后我将其另存为.mat文件并在python中打开。问题是这个过程需要一段时间(大约1分15秒),但我需要它在3秒内完成。

有没有其他方法可以让我加速这个过程?

这是他们的python代码:

代码语言:javascript
复制
import scipy.io as sio   
import numpy as np
sio.savemat('latent_vars.mat', {'latent_vars':noise})

import matlab.engine
eng = matlab.engine.start_matlab()
eng.Kriging_to_python(nargout=0)
eng.quit()

comp_vals=sio.loadmat('comp_vals.mat')

这是matlab代码:

代码语言:javascript
复制
%Load matlab workspace with kriging model
krig_workspace=load('C:\Users\User\Documents\MATLAB\krig_posttrain_workspace2.mat');
%Import latent variable values from python
latent_from_python=load('/Users/User/Documents/project/Interactive Framework/latent_vars.mat');
latent_vars=latent_from_python.latent_vars;
latent_vars=single(latent_vars);
%Save kriging model from workspace as new variable
krig_model=krig_workspace.dmodel;
%Run kriging model with latent variables generated from python
[comp_vals MSEpredict] = predictor(latent_vars, krig_model);
comp_vals=transpose(comp_vals);
save('/Users/User/Documents/project/Interactive Framework/comp_vals.mat','comp_vals');

如有任何帮助或见解,我们将不胜感激!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-09-22 02:18:01

除了Cris Luengo的nice comments

  1. 一个简单的(希望适用的)选项是反之亦然。也就是说,从Matlab运行Python,而不是从Python运行Matlab,就像在official tutorial中一样。根据我自己的经验,这种方式通常效果更好。在这种情况下,如果您重复运行工作流,则只需启动Matlab一次(并且Matlab也仅初始化Python解释器一次),每次都不会产生任何启动开销。如果您发送的数据小于几兆字节,此方法将保证通信开销低于1秒。

  1. 另一种可能的方法涉及Matlab Compiler SDK toolbox (example) -它允许从你的Matlab代码中构建一个包,它通常比整个Matlab更轻量级。此Matlab包的初始化不能保证低于3秒(但可能非常接近)。一旦初始化,就有一种简单而自然的方式来重用你的Matlab函数,而不需要Matlab reinitialization.

可以使用-nojvm选项进一步改进

  1. matlab -batch scriptname (因为,AFAIU,您不使用相关功能)。那是,

C:\Program Files\MATLAB\R2021a\bin>matlab.exe -nojvm -batch "disp(1+1)“

应该会快一点(在我的电脑上大约需要3秒),与

C:\Program Files\MATLAB\R2021a\bin>matlab.exe -batch "disp(1+1)“

(在我的电脑上大约需要6秒)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69276250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档