How to multiply a scalar throughout a specific column within a NumPy array? How to multiply a scalar throughout a specific column within a NumPy array? numpy numpy

How to multiply a scalar throughout a specific column within a NumPy array?


 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])

with some mocked data:

>>> 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

just a few simple rules are required to grok element selection (indexing) in NumPy:

  • NumPy, like Python, is 0-based, so eg, the "1" below refers to the second column

  • commas separate the dimensions inside the brackets, so [rows, columns], eg, A[2,3] means the item ("cell") at row three, column four

  • a colon means all of the elements along that dimension, eg, A[:,1] creates a view of A's column 2; A[3,:] refers to the fourth row


Sure:

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

If you don't want to do this in-place you would need a slightly different strategy:

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


To multiply a constant with a specific column or row:

import numpy as np;X=np.ones(shape=(10,10),dtype=np.float64);X;### this is our default matrixarray([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],   [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]) ## now say we want to multiple it with 10 X=X*10;array([[10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.],   [10., 10., 10., 10., 10., 10., 10., 10., 10., 10.]])### Now if, we want to mulitply 3,5, 7 column with 5X[:,[3,5,7]]=X[:,[3,5,7]]*5 array([[10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.],   [10., 10., 10., 50., 10., 50., 10., 50., 10., 10.]])

Similarly, we can do it for any columns.Hope it clarifies.