我有4个阵列:
k = [5 0 1 2 3 3 4 ] %// array of indexes
logind = [1 0 0 0 0 0 1 ] %// logical array of indexes's activity
mass = [100 200 300 400 500 600 700 ] %// array of masses
res %//some data matrix
我想实现以下算法:
logind
的非零索引。就我的例子而言:c = [1 7]
k
和mass
的相应值。 k([1 7]) = [5 4]
和mass = [100 700]
logind(1)==1
- > k(1)==5
所以
res(5,1) = res(5,1) + mass(1);
logind(7)==1
- > k(7)==4
所以
res(4,7) = res(4,7) + mass(7);
我知道我可以使用for循环来做,但是我使用大型数组,所以想避免这种方法。
我已经尝试过:
arrayfun( @(x) res(k(x), x) + mass(x) )
效果很好,但只返回这些总和,我不知道如何将它添加到当前数组。
答案 0 :(得分:2)
试试这个:
x = k(logind)
y = find(logind)
res = zeros(max(k),numel(logind));
ind = sub2ind(size(res),x,y)
res(ind) = res(ind) + mass(x)
虽然logind
指示要更改的元素列并且它永远不能包含相同的列,但我不明白为什么需要res(...) +
部分?在这种情况下你可以去
res(ind) = mass(x)