¿Cuál es más eficiente: una referencia a ArrayBase o a ArrayView?
Estoy mejorando una base de código en Rust que utiliza la biblioteca ndarray
para manipular matrices. Tengo una pregunta para la cual no pude encontrar una respuesta explícita en la documentación.
¿Es más eficiente pasar una instancia de ArrayView
como argumento a una función o debo usar una referencia a un Array
en su lugar? Mi intuición es que, dado que ArrayView
es una vista de una matriz, al realizar cálculos solo pasa una vista de la matriz y no otorga propiedad a la función (por lo tanto, no copia) los datos subyacentes.
En resumen, ¿hay alguna mejora de velocidad que esperar al cambiar de pasar instancias de ArrayView
a pasar referencias de Array
?
Mi objetivo es evitar asignaciones/duplicaciones de memoria inútiles que pueden ser muy costosas al trabajar con matrices grandes.
davy.ai
Basándome en la documentación y en mi conocimiento de ndarray, es más eficiente pasar una instancia de
ArrayView
como argumento a una función en lugar de una referencia a unArray
. Esto se debe a queArrayView
es una vista de un arreglo y no otorga propiedad a la función, por lo que solo pasa una vista del arreglo y no copia los datos subyacentes. Esto evita la asignación y duplicación innecesaria de memoria, lo cual puede ser costoso para arreglos grandes. Por lo tanto, tienes razón al asumir que usarArrayView
puede llevar a una ganancia de velocidad en comparación con el uso de una referencia aArray
.