Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高效地将numpy数组传递给Matlab函数_Python_Matlab_Numpy_Numpy Ndarray - Fatal编程技术网

Python 高效地将numpy数组传递给Matlab函数

Python 高效地将numpy数组传递给Matlab函数,python,matlab,numpy,numpy-ndarray,Python,Matlab,Numpy,Numpy Ndarray,我正在使用一些调用Matlab函数的python代码。Matlab函数以3D数组作为输入,大小约为87*195*126。我按照本文的建议修改了mlarray\u sequence.py。转换为Matlab双数组所花费的时间确实显著减少(~0.4秒)。但是,将数组传递到Matlab函数似乎仍然需要大约10秒,通过如下对每个步骤进行计时可以看出: 将numpy导入为np 导入matlab.engine 导入matlab 从io导入StringIO 从os.path导入abspath、dirname、

我正在使用一些调用Matlab函数的python代码。Matlab函数以3D数组作为输入,大小约为87*195*126。我按照本文的建议修改了
mlarray\u sequence.py
。转换为Matlab双数组所花费的时间确实显著减少(~0.4秒)。但是,将数组传递到Matlab函数似乎仍然需要大约10秒,通过如下对每个步骤进行计时可以看出:

将numpy导入为np
导入matlab.engine
导入matlab
从io导入StringIO
从os.path导入abspath、dirname、join
导入时间信息
def test1():
start\u time=timeit.default\u timer()
matlabEngine=matlab.engine.connect_matlab()
directory=abspath(dirname(_文件__))
matlabFolder=目录
matlabEngine.addpath(matlabFolder)
matlabEngine.cd(matlabFolder)
timepoint=timeit.default\u timer()
print('连接matlab的运行时间为{}秒'。格式(时间点-开始时间))
img=np.rand.rand(87195126)
timepoint1=timeit.default\u timer()
imgMatlab=matlab.double(img)
timepoint2=timeit.default\u timer()
print('创建matlab数组所用的时间为{}秒'。格式(timepoint2-timepoint1))
out=StringIO()
err=StringIO()
test2(imgMatlab,stdout=out,stderr=err)
打印(out.getvalue())
打印(err.getvalue())
timepoint3=timeit.default\u timer()
print('matlab脚本的运行时间为{}秒'。格式(timepoint3-timepoint2))
test1()
函数结果=test2(img)
抽搐
结果=1;
toc
输出为:

Elapsed time for connecting matlab is 0.0893801 sec
Elapsed time for creating matlab array is 0.40231419999999996 sec
Elapsed time is 0.000603 seconds.
Elapsed time for matlab script is 10.4323424 sec

[Done] exited with code=0 in 11.491 seconds
那么,有没有办法减少将数组传递给matlab函数所花费的时间呢


注意:在我运行脚本之前,我已经通过键入
matlab.engine.shareEngine
共享了matlab会话。

您是否已经运行了共享的matlab会话?我想不会,所以功能中的大部分时间可能都花在启动发动机上。在函数外部启动Matlab会话,并保持python实例打开(例如
python-i yourfile.py
)可能是一个更好的主意。初始化Matlab引擎后,轻松检查是否添加
split_time
,而不是检查函数中占用最多时间的内容。@rinkert Yes,在运行脚本之前,我已经通过键入
matlab.engine.shareEngine
共享了maltab会话。所以启动时间不应该太长。你能通过计时来验证吗?@rinkert你是说连接到matlab的时间吗?我已经更新了上面的代码,您可以看到连接到matlab只需要0.08秒。这10.43秒花在matlabEngine.test2(imgMatlab,stdout=out,stderr=err)行上,它在matlab中基本上不起任何作用。。