3

x,y,z長さのベクトルがあるとしn,m,lます。Qこれらのベクトルの要素を使用してセルマトリックスを作成したいと思います。素朴に、次のようにforループを使用できます。

for i = 1:n
    for j = 1:m
        for k = 1:l
            Q{i,j,k} = someFunction(x(i), y(j), z(k));
        end
     end
end

の各要素Qはベクトルです。

これを行うためのよりエレガントな(そしておそらくより遅い)方法はありますか?

4

2 に答える 2

6
x=[1 2 3 4];
y=[5 6];
z=[7 8 9];
[X Y Z]=meshgrid(x,y,z);
someFunc = @(a,b,c)[a b c]; #% test function; use whatever you want
Q = arrayfun(someFunc,X,Y,Z,'UniformOutput',false);
Q{1,1,1} #% output: [1 5 7]

someFunctionが他の場所で定義されている場合は、を使用arrayfun(@someFunction,X,Y,Z);してハンドルを取得します。(arrayfun引数の各要素を、指定した関数ハンドルへの引数として使用します。ループを回避するには、引数の各要素と関連するcellfunが重要です。)

于 2012-05-24T19:14:12.897 に答える
1

withsomeFunctionはこのように設計されているため、不可能に見えます。

someFunction行列を取り、行列を返すように変更する必要があります。someFunction次に、問題は、行列演算を使用して特定の書き込みを行うことです。元の問題に対する一般的な解決策は不可能に思えますが、特定の機能(ここで提案したように)を検討すると、可能になる可能性があります。

于 2012-05-24T19:13:10.680 に答える