usuarios tutorial para python matlab numpy numpy-broadcasting

para - numpy python tutorial



¿Matlab equivalente a la transmisión de Numpy? (4)

Los bucles ya no están mal en MATLAB gracias a las optimizaciones del compilador como la aceleración Just-In-Time (JITA) . etc. La mayoría de las veces, he notado que una solución con bucles en las versiones actuales de MATLAB es mucho más rápida que complicada (aunque, genial: D) de una sola línea.

bsxfun podría hacer el truco, pero en mi experiencia, tiende a tener problemas de memoria también, pero menos que repmat .

Entonces la sintaxis sería:

AA = bsxfun(@minus,A,b) donde b es el vector y A es tu gran matriz

¡Pero le pido que haga un perfil de la versión descabellada y luego decida! Probablemente, debido a restricciones de memoria, es posible que no tenga otra opción :)

Estoy tratando de encontrar alguna forma de sustraer un vector de tamaño 3 de cada columna de una matriz de 3 * (un gran número) en Matlab. Por supuesto que podría usar un bucle, pero estoy tratando de encontrar una solución más eficiente, un poco como la transmisión numpy. Ah, y no puedo usar repmat porque simplemente no tengo suficiente memoria para usarlo (ya que crea otra matriz de 3 * (un gran número)) ...

es posible?


No sé si esto acelerará el código, pero la sustracción de un escalar de un vector no tiene problemas de memoria. Dado que el tamaño de su matriz es tan asimétrico, la sobrecarga de un bucle for en la dimensión corta es insignificante.

Así que tal vez

matout = matin; for j = 1:size(matin, 1) %3 in this case matout(j,:) = matin(j,:) - vec_to_subtract(j); end

por supuesto, podrías hacer esto en su lugar, pero no sabía si querías preservar la matriz original.