How can one "summarize a matrix with the first four columns"?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
First, I have a matrix like
1 2 3 4 1.1
1 2 3 4 3
1 2 3 5 4
2 3 4 1 6
...
Second, what I would like to do is to summarize the matrix with the first four columns. That is, here, I want to take an average of the entries of the fifth item for the rows that has the same first four columns. In this example, it will be
1 2 3 4 2.05
1 2 3 5 4
2 3 4 1 6
...
Please advise.
0 comentarios
Respuesta aceptada
Jon
el 29 de Jul. de 2020
Editada: Jon
el 29 de Jul. de 2020
Here is one way to do it. There might be some clever way to fully vectorize (eliminate the loop) this, but this will work if performance on huge arrays isn't an issue
% define your original matrix
A = [1 2 3 4 1.1;1 2 3 4 3; 1 2 3 5 4; 2 3 4 1 6]
% find rows with unique first four elements
[C,~,ic] = unique(A(:,1:4),'rows')
% summarize by finding average of elements in fifth column over rows with
% same first four columns
for k = 1:length(ia)
% use logical indexing to find rows with unique first four elements
C(k,5) = mean(A(ic==k,5))
end
2 comentarios
Jon
el 7 de Ag. de 2020
Good idea using accumarray. I didn't know that command. Definitely looks like it has some possibilities.
C(:,5) = accumarray(ic,A(:,5))./accumarray(ic,1)
instead of the for loop works for this case. I would have to think about it more to know if there are any edge cases where this would fail, but I think it maybe a nice way to do it.
Más respuestas (0)
Ver también
Categorías
Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!