In [1]:
import numpy as np

In [2]:
# empty

In [3]:
ni = 3
nj = 2

vec_ni = np.array([1.0, 2.0, 3.0])
vec_nj = np.array([40.0, 50.0])

mat_ni_nj = np.array([
    [600.0, 700.0],
    [800.0, 900.0],
    [1000.0, 1100.0],
])

print('vec_ni:\n', vec_ni, '\n')
print('vec_nj:\n', vec_nj, '\n')
print('mat_ni_nj:\n', mat_ni_nj, '\n')


vec_ni:
 [1. 2. 3.] 

vec_nj:
 [40. 50.] 

mat_ni_nj:
 [[ 600.  700.]
 [ 800.  900.]
 [1000. 1100.]] 


In [4]:
vec_nj * mat_ni_nj


Out[4]:
array([[24000., 35000.],
       [32000., 45000.],
       [40000., 55000.]])

In [5]:
vec_ni * mat_ni_nj.T


Out[5]:
array([[ 600., 1600., 3000.],
       [ 700., 1800., 3300.]])

In [6]:
np.sum(vec_nj * mat_ni_nj, axis=1)


Out[6]:
array([59000., 77000., 95000.])

In [7]:
mat_nj_ni = vec_ni * mat_ni_nj.T

In [8]:
mat_nj_ni / vec_ni


Out[8]:
array([[ 600.,  800., 1000.],
       [ 700.,  900., 1100.]])

In [9]:
# Replacing `mat_nj_ni` with it's expression

(vec_ni * mat_ni_nj.T) / vec_ni


Out[9]:
array([[ 600.,  800., 1000.],
       [ 700.,  900., 1100.]])

In [10]:
# Replacing rightmost `vec_ni` by the sum expression

(vec_ni * mat_ni_nj.T) / np.sum(vec_nj * mat_ni_nj, axis=1)


Out[10]:
array([[0.01016949, 0.02077922, 0.03157895],
       [0.01186441, 0.02337662, 0.03473684]])