Matlabを初めて使用していて、配列に対して同じ操作を実行するときにループの代わりにドット演算子を使用するほうが速いと言われました。配列内のすべてのクラスインスタンスの呼び出しメソッド(Matlab)
例:
A = 1:200
A = A .* 10;
代わりの:
A = 1:200
for i = 1:200
A(i) = A(i) * 10;
end
Iオブジェクトの多次元配列(オブジェクトが私が作成したクラスのインスタンスである)作成されています。 forループを使用せずに、すべてのインスタンスで同じ引数を使用して同じメソッドを呼び出すことは可能ですか?
(Aは、3次元配列である)私はこの3つのアプローチを試してみましたが、彼らは動作しません:
A(:,:,:).methodName(argument1, argument2);
A.methodName(argument1, argument2);
A..methodName(argument1, argument2);
いいえ、手動でループする必要があります。 arrayfun/cellfunという関数がありますが、これは1行の構文を可能にしますが、(明らかに)フードの下のループでもあり、手動のループよりも遅くなる可能性があります。行列の乗算とメソッドの呼び出しは、2つの非常に異なるものです。 – Mikhail
これらの関数(arrayfun/cellfun)をオブジェクトの配列にも使用できますか? (私の配列が小さいので速度はおそらく問題ではなく、コードの読みやすさを単純化します) –
これはうまくいくはずです: 'arrayfun(@(x)x.methodName(argument1、argument2)、A)' – Mikhail