Dado un m-by-n
tamaño de la matriz predefinido y el valor objetivo val
, en su ejemplo:
m = 1;
n = 10;
val = 5;
Actualmente hay 7
ap diferentes enfoques que vienen a la mente:
1) Uso de la función repmat(0.094066 segundos)
A = repmat(val,m,n)
2) de indexación en la matriz sin definir con asignación(0.091561 segundos)
A(1:m,1:n) = val
3) de indexación sobre el valor de destino mediante el ones de función(0.151357 segundos)
A = val(ones(m,n))
4) de inicialización predeterminado con asignación completa(0.104292 segundos)
A = zeros(m,n);
A(:) = val
5) Usando la función de ones con la multiplicación(0.069601 segundos)
A = ones(m,n) * val
6) Usando la función de zeros con adición(0.057883 segundos)
A = zeros(m,n) + val
7) Uso de los repelem función(0.168396 segundos)
A = repelem(val,m,n)
Después de la descripción de cada enfoque, entre paréntesis, su índice de referencia correspondiente a cabo bajo Matlab 2017a
y con 100000
iteraciones. El ganador es el enfoque 6th
, y esto no me sorprende.
La explicación es simple: la asignación generalmente produce ranuras llenas de cero ... por lo tanto, no se realizan otras operaciones excepto la adición de val
a cada miembro de la matriz, y en la parte superior, los argumentos de entrada se desinfectan muy corto.
El mismo no se puede decir para el enfoque 5th
, que es el segundo más rápido uno porque, a pesar del proceso de desinfección argumentos de entrada siendo básicamente el mismo, en el lado de memoria tres operaciones se llevan a cabo en lugar de dos:
- la asignación inicial
- la transformación de cada elemento en
1
- la multiplicación por
val
http://www.mathworks.com/help/techdoc/ref/repmat.html – zellus
Muchas gracias. Si envía esto como respuesta, lo marcaré como correcto. – Tyler
posibles preguntas relacionadas: http://stackoverflow.com/questions/1947889/element-wise-array-replication-in-matlab, http://stackoverflow.com/questions/1975772/matlab-array-manipulation, http://stackoverflow.com/questions/2382319/matlab-element-wise-array-replication-according-to-a-count – Amro