9

YAMLを使用して、複数の言語間でいくつかのデータを通信したいと思います。(「言語に依存しないシリアル化」と考えてください。)これらの言語の1つはMATLABですが、その言語用のYAMLライブラリーが見つからないようです。Googleで「matlabyaml」と「matlabyamlparse」を確認しましたが、関連する結果がないようです。MATLAB Centralで「yaml」を検索したところ、手ぶらでした。

MATLAB用の既存のYAMLライブラリは本当にありませんか?書いても大丈夫ですが、重複した作業は避けたいと思います。(おそらく共有するものはありますか?)

4

8 に答える 8

7

I extended Jan's code to support more data types as well as writing out of a matlab struct to yaml file. It is not just one m-file therefore I located the sources on http://code.google.com/p/yamlmatlab/ Jiri

于 2011-03-02T13:39:46.560 に答える
3

次の例で時間を節約できると思います。

まず、snake YAML を使用して YAML ドキュメントをロードする必要があります。

javaaddpath C:\temp\snakeyaml-1.7.jar
import('org.yaml.snakeyaml.Yaml')

yamlreader = Yaml();
yml = fileread('C:\temp\test.yml');
jymlobj = yamlreader.load(yml);

その後、Javaオブジェクトからデータにアクセスする必要があります。私は次のルーチンを使用してそれを行いました(これは一般的なルーチンではなく、Matlabのように行列が定義されている特定のタイプのYAMLファイル用に開発されたことに注意してください) )

function Data = Hash2Struct(hashMap)

  Data = [];

  iterator = hashMap.keySet().iterator();
  while (iterator.hasNext())
     field = iterator.next();
     if ~isempty(field)
        d =  hashMap.get(field);
        switch class(d)
            case {'java.util.LinkedHashMap'}
                Data.(field) = Hash2Struct(d);
            case {'java.util.ArrayList'}
               Data.(field) = str2num(d.toString);               
            otherwise    
                Data.(field) = d;
        end
     end
  end

がんばれ、ジャン

于 2010-11-09T13:42:38.700 に答える
3

Matlab から既存の Java YAML インポート ライブラリを呼び出します。これはかなり簡単なはずです。Java と Matlab の相互運用性は非常に優れています。matlab のヘルプを参照してください。

于 2009-10-28T17:09:24.273 に答える
3

snakeyaml の matlab ラッパーが追加されました。

http://code.google.com/p/yamlmatlab/

私はそれを試してみましたが、単純なyamlファイルでうまく機能します。yaml フィールド名が有効なフィールド名ではなく、文字列が空の場合、バグがあります。Googleコードサイトの問題セクションで、これらの両方の回避策を提案しました

于 2011-06-23T14:11:58.783 に答える
1

@AndyL sankeyaml の場合は、それを javapath に追加してから import('org.yaml.snakeyaml.Yaml') を追加すると、ドキュメントのように機能します。結果の LinkedHashMap は、多かれ少なかれ matlab 構造体のようにアクセスされます。

于 2010-02-02T20:50:12.647 に答える
0

Geoffr Adams による MEX 実装もあり、mat-yamlと呼ばれ、 libyamlパーサーエミッター用の C バインディングを備えています)。

ただし、Windows ではまだコンパイルできません。

于 2013-08-10T01:38:16.243 に答える
0

ZozaniDB データベース ツールボックスには、YAML の Matlab ネイティブ実装が含まれています (p ファイルとして配布されます)。

>> s=yaml_dump(struct('name','apple','calories',53))

  s =

name: apple
calories: 53

>> yaml_parse(s)

ans = 
        name: 'apple'
    calories: 53
于 2015-03-14T07:30:00.767 に答える