# Sum elements over indices in cell array

2 ビュー (過去 30 日間)
Lennart Sinjorgo 2022 年 6 月 10 日
コメント済み: Matt J 2022 年 6 月 11 日
I have a cell array, in which each cell is a vector of integer numbers. These numbers are certain indices of another vector, say A. For each cell, I want to compute the sum of the elements in A, which are being indexed by my cell. For example, I can easily do this with a for loop (see code below). However, I was wondering if it is possible to vectorize this piece of code.
What I have done now, is artificially edit the cells so that they have the same length, by adding a dummy index. This dummy index then refers to a value 0 in vector A, so that I can easily sum over them by indexing A with the matrix induced by the cell array. However, this takes up a lot of memory.
Any ideas?
A = 1:15;
% some vector containging the values I need
myCell = {[1 3 4], [2 5 8 12]};
% the cell array generally contains arrays of different lengths
sumValues = zeros(1,2);
% I want to fill the array SumValues efficiently
for j = 1:2
sumValues(j) = sum(A(myCell{j}));
end
##### 2 件のコメント表示非表示 1 件の古いコメント
Lennart Sinjorgo 2022 年 6 月 11 日
Yes, its rather time consuming, although definitely not the bottleneck. That doesn't mean I shouldn't look for ways to speed it up though.

サインインしてコメントする。

### 採用された回答

Matt J 2022 年 6 月 10 日

Once you've split things into cells, there is nothing faster than a loop. The better data organization would be to use group labels instead:
A = 1:15;
I = [1 3 4, 2 5 8 12]; %The indices as a vector
G= [1 1 1, 2 2 2 2]; %Group labels
sumValues=accumarray(G(:),A(I(:)))
sumValues = 2×1
8 27
##### 2 件のコメント表示非表示 1 件の古いコメント
Matt J 2022 年 6 月 11 日
You're welcome, but if you conclude that it works well for you, please Accept-click the answer.

サインインしてコメントする。

R2020b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by