2

次のような大きな .mat ファイルが与えられました。

whos('-file','grips.mat')
  Name       Size               Bytes  Class     Attributes

  grip1      1x1              1662198  struct              
  grip2      1x1              2032758  struct              
  grip3      1x1              1660278  struct              
  grip4      1x1              1650678  struct              
  grip5      1x1              1607478  struct              
  grip6      1x1             63353718  struct

各グリップには、複数のセンサーからの、握っている人の複数の筋肉信号 (EMG) が記録されています。これらのグリップの 1 つに対して、これらのセンサー信号の 1 つだけをロードしたいと考えています。次のことをしたいのですが、うまくいきません。

EMG_signal = load('grips', 'grip6.data(1,:)')

私が得ることができる最も近いものはこれです:

EMG_signal = load('grips', 'grip6');
EMG_signal = EMG_signal.grip6.data(1,:);

ただし、これには必要な数倍のデータをロードしてから破棄する必要がありました。簡単なショートカットはありますか?

これは、.mat ファイルに格納されたオブジェクトにも当てはまります。変数 (プロパティ) の 1 つの値を取得するためだけに、オブジェクト全体を読み込む必要はありません。

どうもありがとう。

4

1 に答える 1

2

素晴らしい質問です。実行しているMatlabのバージョンに依存しているようです。Mathworks は、 R2011b でmatfile 関数を追加しました。

しかし、残念ながら、構造があり、まっすぐな行列が格納されていないため、特定の問題はまだ解決できません。「grip6」が行列の場合、次のようにサブ行列だけにアクセスできます。

matObj = matfile('grips.mat')
EMG_signal = matObj.grip6(1,:)

しかし、ドキュメントが言うように、

matfile は、次へのインデックス作成をサポートしていません。

  • 構造体のフィールド

Matlab が mat ファイルからの行列または配列の一部の読み込みをサポートしていない方法の詳細については、このmatlab central threadを参照してください。

于 2012-08-14T02:45:35.347 に答える