Sprintf MATLAB和Python

时间:2012-12-04 16:00:49

标签: python matlab

我试图将矩阵变量从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) 

2 个答案:

答案 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]])