una sumatoria sumar suma matriz lista filas elementos datos columnas python multidimensional-array numpy

sumatoria - sumar filas y columnas de una matriz python



numpy dividir fila por fila suma (2)

Método n. ° 1: use None (o np.newaxis ) para agregar una dimensión extra para que la transmisión se comporte:

>>> e array([[ 0., 1.], [ 2., 4.], [ 1., 5.]]) >>> e/e.sum(axis=1)[:,None] array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])

Método n. ° 2: transponerse feliz:

>>> (e.T/e.sum(axis=1)).T array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])

(Puede dejar caer el axis= parte por concisión, si lo desea).

Método n. ° 3: (promovido del comentario de Jaime)

Utilice el argumento keepdims en sum para conservar la dimensión:

>>> e/e.sum(axis=1, keepdims=True) array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])

¿Cómo puedo dividir una fila de matriz numpy por la suma de todos los valores en esta fila?

Este es un ejemplo. Pero estoy bastante seguro de que hay una manera elegante y mucho más eficiente de hacer esto:

import numpy as np e = np.array([[0., 1.],[2., 4.],[1., 5.]]) for row in xrange(e.shape[0]): e[row] /= np.sum(e[row])

Resultado:

array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])


Puedes hacerlo matemáticamente como .

Aquí, E es su matriz original y D es una matriz diagonal donde cada entrada es la suma de la fila correspondiente en E Si tienes la suerte de tener una D invertible, esta es una forma matemáticamente conveniente para hacer las cosas.

En numpy:

import numpy as np diagonal_entries = [sum(e[row]) for row in range(e.shape[0])] D = np.diag(diagonal_entries) D_inv = np.linalg.inv(D) e = np.dot(e, D_inv)