Marix manipulation
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
How do I perform this operation? I have a data set with recurring values at a given co-ordinate. I need to sum values of the repeating coordinates. I initially used a for loop to solve the problem but it is too slow. Here is a simple example of the problem:
val = rand(1);
a = [1 1 1 val;
1 2 1 val;
1 1 1 val];
Since the 1st and 3rd rows have the same co-ordinates, I need to add their values, delete the entries and replace with the new summed value. I know it should be possible using sub2ind and a cumsum operation, but I haven't figure exactly how to combine them yet. If I haven't written an answer at the time you are reading this, it means I still haven't got the combination right. Thanks.
1 Kommentar
Pierre
am 5 Aug. 2011
>> _Since the 1st and 3rd rows have the same co-ordinates, I need to add their values, delete the entries and replace with the new summed value._
I wonder, if anybody can understand what you're trying to do there... I can't. :S
Please post your actual solution (with the for loop), this would allow us to see what the output's supposed to look like, would you?
Akzeptierte Antwort
Daniel Shub
am 5 Aug. 2011
My solution has a for loop.
[b, i, j] = unique(a(:, 1:(end-1)), 'rows');
c = b;
for ii = 1:length(i)
c(ii, 4) = sum(a(j==ii, 4));
end
My guess is that it can be eliminated (and potentially made faster) with a bsxfun or arrayfun. In order to optimize it, we would need to know the sizes and how often things repeat.
3 Kommentare
Daniel Shub
am 5 Aug. 2011
While I am happy to have my answer accepted, my guess is that if you un-accept my answer (not even sure you can do that), once the people in the US wake up, you will get a bsxfun/arrayfun/accumarray solution.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!