¿Cómo multiplicar un escalar en una columna específica dentro de una matriz NumPy?

Necesito hacer un análisis en un gran conjunto de datos de un trabajo de campo de hidrolgeología. Estoy usando NumPy. Quiero saber cómo puedo:

  1. multiplique, por ejemplo, la segunda columna de mi matriz por un número (por ejemplo, 5.2). Y entonces

  2. calcula la sum acumulada de los números en esa columna.

Como mencioné, solo quiero trabajar en una columna específica y no en toda la matriz.

you can do this in two simple steps using NumPy: >>> # multiply column 2 of the 2D array, A, by 5.2 >>> A[:,1] *= 5.2 >>> # assuming by 'cumulative sum' you meant the 'reduced' sum: >>> A[:,1].sum() >>> # if in fact you want the cumulative sum (ie, returns a new column) >>> # then do this for the second step instead: >>> NP.cumsum(A[:,1]) 

Con algunos datos burlados:

 >>> A = NP.random.rand(8, 5) >>> A array([[ 0.893, 0.824, 0.438, 0.284, 0.892], [ 0.534, 0.11 , 0.409, 0.555, 0.96 ], [ 0.671, 0.817, 0.636, 0.522, 0.867], [ 0.752, 0.688, 0.142, 0.793, 0.716], [ 0.276, 0.818, 0.904, 0.767, 0.443], [ 0.57 , 0.159, 0.144, 0.439, 0.747], [ 0.705, 0.793, 0.575, 0.507, 0.956], [ 0.322, 0.713, 0.963, 0.037, 0.509]]) >>> A[:,1] *= 5.2 >>> A array([[ 0.893, 4.287, 0.438, 0.284, 0.892], [ 0.534, 0.571, 0.409, 0.555, 0.96 ], [ 0.671, 4.25 , 0.636, 0.522, 0.867], [ 0.752, 3.576, 0.142, 0.793, 0.716], [ 0.276, 4.255, 0.904, 0.767, 0.443], [ 0.57 , 0.827, 0.144, 0.439, 0.747], [ 0.705, 4.122, 0.575, 0.507, 0.956], [ 0.322, 3.71 , 0.963, 0.037, 0.509]]) >>> A[:,1].sum() 25.596156138451427 

solo se requieren algunas reglas simples para agrupar la selección de elementos (indexación) en NumPy:

  • NumPy, al igual que Python, se basa en 0, por lo que, por ejemplo, el “1” a continuación se refiere a la segunda columna

  • las comas separan las dimensiones dentro de los corchetes, por lo que [filas, columnas], por ejemplo, A [2,3] significa el elemento (“celda”) en la fila tres, columna cuatro

  • una coma significa todos los elementos a lo largo de esa dimensión, por ejemplo, A [:, 1] crea una vista de la columna 2 de A; A [3 ,:] se refiere a la cuarta fila

Por supuesto:

 import numpy as np # Let a be some 2d array; here we just use dummy data # to illustrate the method a = np.ones((10,5)) # Multiply just the 2nd column by 5.2 in-place a[:,1] *= 5.2 # Now get the cumulative sum of just that column csum = np.cumsum(a[:,1]) 

Si no quiere hacer esto en el lugar, necesitará una estrategia ligeramente diferente:

 b = 5.2*a[:,1] csum = np.cumsum(b)