Promedio de números positivos en una fila

Tengo una matriz de números y cada fila tiene una combinación de números positivos y negativos.

Quiero crear un nuevo vector, que me da el promedio de todos los números positivos en una fila en la matriz.

Por ejemplo, si esta es la matriz:

[[1 2 3 -1] [2 5 -6 5]] 

Quiero crear el vector con los valores:

 [[2] [4]] 

¿Cuál es la forma más rápida de hacerlo?

Siempre habrá números positivos.

Si se garantiza que tiene al menos un número positivo (>=0) por fila, puede convertir los negative numbers (excluding 0) a NaNs con np.where y luego usar np.nanmean largo de las filas, como así:

 np.nanmean(np.where(A>=0,A,np.nan),axis=1) 

Ejecución de la muestra

 In [69]: A Out[69]: array([[ 2, 3, -6, -6, -4], [-5, -6, -1, -1, 3], [-8, 5, -7, -9, -9], [-3, 0, 7, -5, -6]]) In [70]: np.nanmean(np.where(A>=0,A,np.nan),axis=1) Out[70]: array([ 2.5, 3. , 5. , 3.5]) 

Una posible solución sería

  • seleccione todos los no negativos
  • calcular explícitamente la media como sum / recuento

En codigo:

 notneg = x >= 0 result = (x * notneg).sum(1) / notneg.sum(1)