関数によって返された MATLAB 配列を、ローカル変数に割り当てずにインデックスするにはどうすればよいでしょうか? 質問する

関数によって返された MATLAB 配列を、ローカル変数に割り当てずにインデックスするにはどうすればよいでしょうか? 質問する

たとえば、 から中央の値を読み取りたい場合は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

最初に変数に割り当てずに配列/行列から値を読み取ることは可能ですか?

ベストアンサー1

実際にあなたが望むことを行うことは可能ですが、インデックス演算子の関数形式を使用する必要があります。を使用してインデックス操作を実行すると()、実際には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

しかし、結局のところ、一時的なローカル変数ソリューションの方がはるかに読みやすく、間違いなく私が提案する方法です。

おすすめ記事