1. ホーム
  2. matlab

[解決済み] 関数から返されたMATLAB配列を、最初にローカル変数に代入せずにインデックスを作成するにはどうすればよいですか?

2022-03-25 11:16:54

質問

例えば、中間の値を magic(5) ということであれば、以下のようになります。

M = magic(5);
value = M(3,3);

を取得します。 value == 13 . この中のどれかのようなことができるようにしたいです。

value = magic(5)(3,3);
value = (magic(5))(3,3);

を使えば、中間変数が不要になります。しかし、MATLABは Unbalanced or unexpected parenthesis or bracket の前の最初の括弧に 3 .

最初に変数に代入せずに、配列/行列から値を読み取ることは可能でしょうか?

どのように解決するのですか?

実は しかし、インデキシング演算子の関数型を使用しなければなりません。を使ってインデックス付け操作を行う場合 () を呼び出していることになります。 subsref 関数を使用します。そのため、たとえ できない するのです。

value = magic(5)(3, 3);

あなた できる する。

value = subsref(magic(5), struct('type', '()', 'subs', {{3, 3}}));

不細工だけど、可能性はある;)

一般的には、インデックス作成ステップを関数呼び出しに変更するだけで、直後に2組の括弧が続くようなことはありません。別の方法としては、独自の 匿名関数 を使用して、添え字のインデックスを作成します。例えば

subindex = @(A, r, c) A(r, c);     % An anonymous function for 2-D indexing
value = subindex(magic(5), 3, 3);  % Use the function to index the matrix

しかし、すべてが終わったとき、一時的なローカル変数の解決策は 大いに より読みやすく、間違いなく私がお勧めする方法です。