2014-01-17 57 views
1

我打電話從MATLAB python腳本。蟒腳本需要3個數組作爲輸入參數:調用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的Python腳本這樣的:

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

在Matlab中,dXdYdZ都是1x500陣列型。 不過,我得到以下錯誤:

ValueError: could not convert string to float: dX 

它看起來像python腳本調用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

看起來像一個可行的解決方案,但是我得到以下錯誤: ???錯誤使用==>系統 輸入參數太多。 –

+0

如果我嘗試'系統([ ' 「mypath中\ python.exe」', 'test3.py'],文件名);',我得到以下錯誤:使用 '錯誤==>系統 無法識別的選項:tempname。 txt' –

+0

我已更改代碼以正確構建命令。對不起,只是另一片Matlab的不一致。 – chthonicdaemon