2

モジュールを使用していくつかのMatlabスクリプト (関数定義ではない)を実行しようとしています。Python 3oct2py

これらのスクリプト (大量) には、特定の ASCII ファイル (同じディレクトリに含まれる) を読み取るための非常に拡張された定義が含まれています。

Matlab (オクターブ) スクリプトを使用して Python でデータを読み取る方法がわかりません。

ここで私がやっていること:

from oct2py import octave

import numpy as np
import os

import pprint

hom_dir='/path_to/files&scripts_dir/'
os.chdir(hom_dir)

octave.addpath(/path_to/files&scripts_dir/')

out=octave. matlab_file # (matlab_file.m)

出力:

Out[237]: <function oct2py.core.Oct2Py._make_octave_command.<locals>.octave_command>”

pprint.pprint(out)

<function Oct2Py._make_octave_command.<locals>.octave_command at 0x7f2069d669d8>”

エラーは返されませんが、(Octave セッションで読み取られた) データを取得する方法がわかりません。oct2py関数を定義する where about ファイルを使用して .m ファイルを実行するために見つけた例ですが、それは私の場合ではありません。

4

1 に答える 1

0

スクリプトが (仮想) オクターブ ワークスペースに結果を配置すると仮定すると、ワークスペースへのアクセスを試みることができます。

例:

%% In file myscript.m
a = 1
b = 2

Python コード:

>>> octave.run('myscript.m')
>>> vars = octave.who(); vars
[u'A__', u'a', u'b']
>>> octave.a()
1.0
>>> octave.b()
2.0

いくつかのメモ/警告:

  • スクリプトを実行しようとすると、関数として実行しようとしていると不平を言うので、問題が発生しました。コマンドを使用してこれをバイパスできますrun
  • オクターブの現在のディレクトリは、Python の現在のディレクトリと同じではない場合があります (これは、オクターブ エンジンの起動方法によって異なります)。私の場合、python はホーム ディレクトリで開始されましたが、octave はデスクトップ ディレクトリで開始されました。手動で確認して正しいディレクトリに移動する必要がありました。

    octave.pwd()
    octave.cd('/path/to/my/homedir')
    
  • ワークスペース内の奇妙な変数A__(B__など) は、oct2py エンジンを介して関数に渡した最新の引数を反映しています (ただし、何らかの理由で、通常の変数のように呼び出すことはできません)。例えば

    >>> octave.plus(1,2)
    3.0
    >>> print octave.who()
    [u'A__', u'B__', u'a', u'b']
    >>> octave.eval('A__')
    A__ =  1
    >>> octave.eval('B__')
    B__ =  2
    
  • 上記からお気づきかもしれませんが、通常のans変数はワークスペースに保持されていません。を参照するスクリプト アクションに依存しないでくださいans。のコンテキストでは、常に評価さoct2pyれるようですansNone

于 2016-07-23T15:48:23.933 に答える