%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
X = np.array([[0.11, 0.2, 0], [0.81, 0, 0], [0, 0.88, 0.74], [0, 0, 0.42]])
m = X.shape[0]
n = X.shape[1]
X
array([[0.11, 0.2 , 0. ], [0.81, 0. , 0. ], [0. , 0.88, 0.74], [0. , 0. , 0.42]])
Y = X.T
Y
array([[0.11, 0.81, 0. , 0. ], [0.2 , 0. , 0.88, 0. ], [0. , 0. , 0.74, 0.42]])
Y_2norm = np.linalg.norm(Y, ord=2, axis=1).reshape(n, 1)
Y_T_2norm = np.linalg.norm(Y.T, ord=2, axis=0).reshape(1, n)
I = np.dot(Y, Y.T) / np.dot(Y_2norm, Y_T_2norm)
I = np.round(I, 3)
I
array([[1. , 0.03 , 0. ], [0.03 , 1. , 0.848], [0. , 0.848, 1. ]])
I_1norm = np.linalg.norm(I, ord=1, axis=1).reshape(n, 1)
P = np.dot(I, Y) / I_1norm
P = np.round(P, 3)
P = P.T
P
array([[0.113, 0.108, 0.092], [0.786, 0.013, 0. ], [0.026, 0.803, 0.804], [0. , 0.19 , 0.227]])
X_2norm = np.linalg.norm(X, ord=2, axis=1).reshape(m, 1)
X_T_2norm = np.linalg.norm(X.T, ord=2, axis=0).reshape(1, m)
U = np.dot(X, X.T) / np.dot(X_2norm, X_T_2norm)
U = np.round(U, 3)
U
array([[1. , 0.482, 0.671, 0. ], [0.482, 1. , 0. , 0. ], [0.671, 0. , 1. , 0.644], [0. , 0. , 0.644, 1. ]])
U_1norm = np.linalg.norm(U, ord=1, axis=1).reshape(m, 1)
P = np.dot(U, X) / U_1norm
P = np.round(P, 3)
P
array([[0.232, 0.367, 0.231], [0.582, 0.065, 0. ], [0.032, 0.438, 0.436], [0. , 0.345, 0.545]])