1

これはできますか?基本的に、struct array val(カスタム構造のリストを含む)があり、カスタムmultiply関数Multiplyを使用してすべての要素を乗算したいのですが、ループは使用しません。

で使用しようとしaccumarray(indx, val', [1 1], @Multiply)ましindx=ones(lengths(val), 2)たが、これは機能しません(少なくともOctave 3.4.3では)。実行すると、C=Multiply(A,B)関数内でAに構造体配列全体が渡され、通常の場合のようにAが配列の最初の要素でBが2番目の要素である代わりにBが空になります。

ここで自分自身を明確にしたことを願っています。ありがとう

4

1 に答える 1

0

あなたが何をしたかったのかわかりません。私はあなたが期待したものに関連するいくつかのコードを作成しました:

val = 101:105;
strct_template.index = 1;
strct_template.b = 1;
strct_array = repmat(strct_template,length(val),1);

for i=1:length(val)
    strct_array(i).index = i;
    strct_array(i).b = val(i);
end

subs = [1; 2; 4; 2; 4];
sum_example = accumarray(subs, vertcat(strct_array.b)) % example from accumarray in matlab help 
mult_example = accumarray(subs, vertcat(strct_array.b),[],@prod)
subs = ones(length(strct_array),1);
mult_example2 = accumarray(subs, vertcat(strct_array.b),[],@prod) % I suppose you wanted this
mult_example3 = prod(vertcat(strct_array.b)) % which gives the same result as this

accumarray 関数を使用するのは初めてなので、必要なものを誤解している可能性があります。お役に立てれば幸いです。

于 2012-10-14T14:11:38.147 に答える