gpt4 book ai didi

python - 如何有效地将Matlab引擎数组转换为numpy ndarray?

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:04 24 4
gpt4 key购买 nike

目前,我正在一个项目中,我需要执行一些步骤,以处理旧版Matlab代码(使用Matlab引擎),而其余部分则使用Python(numpy)进行处理。

我注意到,将结果从Matlab的matlab.mlarray.double转换为numpy的numpy.ndarray似乎非常缓慢。

这是一些示例代码,用于从另一个ndarray,列表和mlarray创建具有1000个元素的ndarray:

import timeit
setup_range = ("import numpy as np\n"
"x = range(1000)")
setup_arange = ("import numpy as np\n"
"x = np.arange(1000)")
setup_matlab = ("import numpy as np\n"
"import matlab.engine\n"
"eng = matlab.engine.start_matlab()\n"
"x = eng.linspace(0., 1000.-1., 1000.)")
print 'From other array'
print timeit.timeit('np.array(x)', setup=setup_arange, number=1000)
print 'From list'
print timeit.timeit('np.array(x)', setup=setup_range, number=1000)
print 'From matlab'
print timeit.timeit('np.array(x)', setup=setup_matlab, number=1000)


这需要以下时间:

From other array
0.00150722111994
From list
0.0705359556928
From matlab
7.0873282467


转换所需时间约为列表转换的100倍。

有什么办法可以加快转换速度吗?

最佳答案

发布问题后片刻,我找到了解决方案。

对于一维数组,仅访问Matlab数组的_data属性。

import timeit
print 'From list'
print timeit.timeit('np.array(x)', setup=setup_range, number=1000)
print 'From matlab'
print timeit.timeit('np.array(x)', setup=setup_matlab, number=1000)
print 'From matlab_data'
print timeit.timeit('np.array(x._data)', setup=setup_matlab, number=1000)


版画

From list
0.0719847538787
From matlab
7.12802865169
From matlab_data
0.118476275533


对于多维数组,您需要随后重新调整数组的形状。对于二维数组,这意味着调用

np.array(x._data).reshape(x.size[::-1]).T

关于python - 如何有效地将Matlab引擎数组转换为numpy ndarray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59841144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com