我正在从matlab调用python脚本。 python脚本需要3个数组作为输入参数:
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中,dX
,dY
和dZ
都是1x500数组类型。
但是,我收到以下错误:
ValueError: could not convert string to float: dX
看起来python脚本调用不会评估dX
数组并将参数作为字符串。我该如何纠正?
答案 0 :(得分:1)
没有直接的方法将数组参数传递给命令行程序。基本上,所有命令行参数将始终被解释为字符串,分为单词。您可以将命令行中的数组作为单独的条目传递,但命令行的长度有限制。我建议您将Matlab中的数组save
转换为文本文件,然后将它们加载到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