1. ホーム
  2. matlab

[解決済み] MATLABで行列の各行/列に関数を適用するにはどうすればよいですか?

2022-11-18 14:49:01

質問

ベクトルの各項目に関数を適用するには、例えば次のようにします。 v + 1 というように、ベクトル内のすべての項目に関数を適用することもできますし、関数 arrayfun . forループを使わずに、行列の各行/列に対して行うにはどうしたらよいでしょうか?

どのように解決するには?

のような多くの組み込み操作は sum といった prod はすでに行や列をまたいで操作することができるので、これを利用するために適用する関数をリファクタリングすることができるかもしれません。

それが実行可能なオプションでない場合、1つの方法として、行または列をセルに集めるために、次のものを使用します。 mat2cell または num2cell であるならば cellfun を使用して、結果のセル配列を操作します。

例として、行列の列の合計を求めるとします。 M . これを行うには、単純に sum :

M = magic(10);           %# A 10-by-10 matrix
columnSums = sum(M, 1);  %# A 1-by-10 vector of sums for each column

そして、より複雑な num2cell / cellfun というオプションがあります。

M = magic(10);                  %# A 10-by-10 matrix
C = num2cell(M, 1);             %# Collect the columns into cells
columnSums = cellfun(@sum, C);  %# A 1-by-10 vector of sums for each cell