vectores una transpuesta multiplicar multiplicacion matriz matrices libreria elementos ejemplos array agregar python performance function numpy vectorization

python - transpuesta - Evaluación eficiente de una función en cada celda de una matriz NumPy



transpuesta de una matriz en python numpy (3)

Dada una matriz NumPy A , ¿cuál es la forma más rápida / más eficiente de aplicar la misma función, f , a cada celda?

  1. Supongamos que asignaremos a A (i, j) la f (A (i, j)) .

  2. La función, f , no tiene una salida binaria, por lo que las operaciones de máscara (ing) no ayudarán.

¿Es la iteración "doble" obvia (a través de cada celda) la solución óptima?


Si está trabajando con números y f(A(i,j)) = f(A(j,i)) , puede usar scipy.spatial.distance.cdist definiendo f como una distancia entre A(i) y A(j) .


Simplemente puede vectorize la función y luego aplicarla directamente a una matriz Numpy cada vez que la necesite:

import numpy as np def f(x): return x * x + 3 * x - 2 if x > 0 else x * 5 + 8 f = np.vectorize(f) # or use a different name if you want to keep the original f result_array = f(A) # if A is your Numpy array

Probablemente sea mejor especificar un tipo de salida explícita directamente al vectorizar:

f = np.vectorize(f, otypes=[np.float])