Given that A is a sparse matrix, norm(A(i,:)) takes a very long time. Why and can one do better ?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Cem Gormezano
el 9 de Ag. de 2020
Editada: Walter Roberson
el 11 de Ag. de 2020
I am computing norm(A(i,:)) within a loop, where A is a sparse matrix. This seems to be a bottleneck, is there anyway to perform this faster ? Thank you.
1 comentario
Walter Roberson
el 10 de Ag. de 2020
Can you recode with the matrix transposed? Accessing sparse by columns is faster than by row.
Respuesta aceptada
John D'Errico
el 10 de Ag. de 2020
You really don't want to use loops to do something like this.
>> A = sprand(10000,10000,0.001);
>> timeit(@() norm(A(1,:)))
ans =
0.000121650132
>> timeit(@() sqrt(sum(A.^2,2)))
ans =
0.000442972132
So, the time to compute the norm of just one of the rows was a significant fraction of the total time to compute the norm of all rows at once.
0 comentarios
Más respuestas (2)
Walter Roberson
el 11 de Ag. de 2020
Editada: Walter Roberson
el 11 de Ag. de 2020
If you were going to do this repeatedly, then
%one time cost
At = A.';
%then
norm(At(:,1))
is over 100 times faster than
norm(A(1,:))
For John's suggestion of A = sprand(10000,10000,0.001); then the cost of transposing A is roughly the same as the cost of calculating 11 row norms of A.
... And of course, it might happen to be practical to work with the transposed version instead of the original, so in some cases there would be no computation cost, just the cost of changing the code.
0 comentarios
James Tursa
el 9 de Ag. de 2020
Editada: James Tursa
el 9 de Ag. de 2020
Will you eventually need all of the rows? E.g., do this once at the beginning outside the loop
n = sqrt(sum(A.^2,2))
And then just pick off the element you want each iteration.
Alternatively, you could do this calculation one row at a time in a mex routine in order to avoid the data copy associated with forming the A(i,:) row explicitly.
0 comentarios
Ver también
Categorías
Más información sobre Creating and Concatenating 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!