我试图将矩阵变量从MATLAB传递给python,但我只是在python中获取该矩阵的第一个元素。有谁知道可以得到完整的矩阵?
的Python
import sys
if __name__ == '__main__':
x = sys.argv[1]
print x
MATLAB
A = magic(5);
[str,err] = sprintf('/usr/local/python name_of_program.py %d ', A);
unix(str)
答案 0 :(得分:1)
查看str:/usr/local/python name_of_program.py 17 /usr/local/python name_of_program.py 23 /usr/local/python name_of_program.py 4 ...
当你将5x5矩阵传递给sprintf时,它会重现格式化字符串25次,其中一个元素按顺序替换为%d(逐列)。
我建议在程序之间传输数据的另一种方法,例如将其写入文件。 如果您确实想要在命令行上传递所有内容,请尝试以下操作:
A_str = sprintf(' %d',A);
str = strcat('/usr/local/python name_of_program.py ',A_str);
答案 1 :(得分:0)
您可能也想使用numpy来重塑数组。或者,如果要导入太多,您可以创建自己的整形函数试试这个:
import sys, numpy
if __name__ == '__main__':
x = sys.argv[1::3]
y = numpy.reshape(x, (5,5))
print y
我还注意到调用是为A的每个元素添加一次字符串,因此您可以考虑使用mat2str(A),如:
[str, err] = sprintf('/usr/local/python program.py "%s" ', mat2str(A));
我还将%d更改为%s,因为无论如何你都将它作为字符串传递给python。输出结果如下:
python program.py "[17 24 1 8 15;23 5 7 14 16;4 6 13 20 22;10 12 19 21 3;11 18 25 2 9]"
您可以使用numpy和
从该字符串创建矩阵>>> import sys
>>> import numpy
>>> print(numpy.matrix(sys.argv[1]))
matrix([[17, 24, 1, 8, 15],
[23, 5, 7, 14, 16],
[ 4, 6, 13, 20, 22],
[10, 12, 19, 21, 3],
[11, 18, 25, 2, 9]])