2014-01-17 2 views
1

Я вызываю скрипт python из matlab. Сценарий питона нужны 3 массивов в качестве входных аргументов:Вызов скрипта Python из Matlab с аргументами

import sys 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.set_aspect('equal') 

X = np.array(float(sys.argv[1]), dtype =np. float32) 
Y = np.array(float(sys.argv[2]), dtype =np. float32) 
Z = np.array(float(sys.argv[3]), dtype =np. float32) 

scat = ax.scatter(X, Y, Z) 

я называю сценарий Python из Matlab, как это:

!"MYPATH\python.exe" test3.py dX dY dZ 

В Matlab, dX, dY и dZ все 1x500 типа массива. Однако, я получаю следующее сообщение об ошибке:

ValueError: could not convert string to float: dX 

Похоже вызова питон скрипт не оценивает dX массив и принимает аргумент в виде строки. Как я могу это исправить?

ответ

1

Нет простого способа передать аргументы массива в программы командной строки. В принципе, все аргументы командной строки всегда будут интерпретироваться как строки, разбитые на слова. Вы можете передать массивы в командной строке как отдельные записи, но ограничение длины командной строки ограничено. Я бы порекомендовал вам save массивы в Matlab в текстовый файл, а затем загрузить их в программу Python:

В Matlab

filename = tempname; 
data = [dX' dY' dZ']; 
save(filename, 'data', '-ascii'); 
system(['"MYPATH\python.exe" test3.py "' filename '"']); 

В Python:

dX, dY, dZ = np.loadtxt(sys.argv[1]).T 
+0

Посмотрите, как многообещающее решение , однако я получаю следующую ошибку: ??? Ошибка при использовании ==> system Слишком много входных аргументов. –

+0

Если я попробую 'system (['" MYPATH \ python.exe ",' test3.py '], filename);', я получаю следующую ошибку: 'Error using ==> system Unrecognized option: tempname. txt' –

+0

Я изменил код, чтобы правильно построить команду. Извините, это еще один пример несогласованности Matlab. – chthonicdaemon

Смежные вопросы