3

MATLAB から 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 に渡すと、要素の 1 つを %d に置き換えて、書式設定文字列を 25 回 (列ごとに) 順番に再生成します。

ファイルに書き込むなど、プログラム間でデータを転送する別の方法を提案します。コマンドラインですべてを渡したい場合は、次のことを試してください。

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 の要素ごとに文字列を 1 回追加していることにも気付きました。そのため、次のようにmat2str(A) の使用を検討してください。

[str, err] = sprintf('/usr/local/python program.py "%s" ', mat2str(A));

とにかくPythonで文字列として渡しているので、%dを%sに変更しました。これの出力は次のとおりです。

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 に答える