Attualmente sto lavorando su un progetto in cui ho bisogno di fare alcune fasi di elaborazione con codice Matlab legacy (usando il motore Matlab) e il resto in Python (numpy).Come convertire in modo efficiente gli array di motori Matlab in numpy ndarray?
Ho notato che la conversione dei risultati da Matlab matlab.mlarray.double
a numpy numpy.ndarray
sembra terribilmente lenta.
Ecco qualche esempio di codice per creare un ndarray con 1000 elementi da un altro ndarray, una lista e un mlarray:
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)
Quale prende i seguenti orari:
From other array
0.00150722111994
From list
0.0705359556928
From matlab
7.0873282467
La conversione dura circa 100 volte più lungo di una conversione dalla lista.
C'è un modo per accelerare la conversione?