3

我正在尝试将矩阵变量从 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) 
4

2 回答 2

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);
于 2012-12-04T18:33:55.380 回答
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]])
于 2012-12-04T21:25:16.020 回答