当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何有效地将Matlab引擎数组转换为numpyndarray?》经验,为你挑选了2个好方法。

我目前正在开发一个项目,我需要使用传统的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倍.

有没有办法加快转换?



1> Tim..:

发布问题后的时刻我找到了解决方案.

对于一维数组,只能访问_dataMatlab数组的属性.

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



2> RobR..:

Tim的答案非常适合2D数组,但是将其调整为N维数组的方法是使用ordernp.reshape()的参数:

np_x = np.array(x._data).reshape(x.size, order='F')

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有