如何使Accumarray与Struct数组一起使用?

时间:2012-10-13 05:30:47

标签: matlab octave accumarray

可以这样做吗?基本上,我有一个struct array val (包含我自定义结构的列表),我想使用自定义乘法函数乘法将所有元素相乘,我不知道想要使用循环。

我尝试将accumarray(indx, val', [1 1], @Multiply)indx=ones(lengths(val), 2)一起使用,但这不起作用(至少对于Octave 3.4.3)。执行时,在我的C=Multiply(A,B)函数内,A传递整个struct数组,B为空而不是A是数组的第一个元素,B是第二个元素,正常情况下。

希望我在这里说清楚。谢谢

1 个答案:

答案 0 :(得分: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功能,所以也许我误解了你需要的东西。希望我能提供帮助,