2014-01-17 2 views
1

저는 matlab에서 파이썬 스크립트를 호출하고 있습니다.인수가있는 Matlab에서 Python 스크립트 호출

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) 

내가 같이 matlab에에서 파이썬 스크립트를 호출 :

!"MYPATH\python.exe" test3.py dX dY dZ 
matlab에, dX, dY에서

dZ 모든 × 500 배열 유형 파이썬 스크립트는 3 개 입력 인수로 배열을 필요로한다. 그러나, 나는 다음과 같은 오류가 발생합니다 :

ValueError: could not convert string to float: dX 

그것은 dX 배열을 평가하지 않습니다 파이썬 스크립트 호출처럼 보이는 문자열로 인수를합니다. 어떻게 해결할 수 있습니까?

답변

1

명령 줄 프로그램에 배열 인수를 전달하는 간단한 방법은 없습니다. 기본적으로 모든 명령 행 인수는 항상 단어로 분리 된 문자열로 해석됩니다. 명령 행에서 배열을 별도의 항목으로 전달할 수 있지만 명령 행의 길이에는 제한이 있습니다.

을 matlab에

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

에 파이썬에서 : 유망한 솔루션과 같은

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

봐 나는 파이썬 프로그램을로드 한 후 텍스트 파일에 당신이 matlab에의 배열을 save하는 것이 좋습니다 것입니다 , 그러나 나는 다음과 같은 오류가 발생합니다 : ??? ==> 시스템을 사용하는 중 오류가 발생했습니다. 입력 인수가 너무 많습니다. –

+0

시스템 ([ '' "MYPATH \ python.exe", 'test3.py'], 파일 이름);'을 시도하면 다음 오류가 발생합니다. '==> 시스템을 사용하는 중 오류 인식 할 수없는 옵션 : tempname. txt' –

+0

명령을 올바르게 빌드하기 위해 코드를 변경했습니다. 미안 해요, Matlab 불일치의 또 다른 부분. – chthonicdaemon

관련 문제