import numpy as np
import matplotlib.pyplot as plt
D=np.array([[0,411,213,219,296,397],
[411,0,204,203,120,152],
[213,204,0,73,136,245],
[219,203,73,0,90,191],
[296,120,136,90,0,109],
[ 397,152,245,191,109,0]])
N = D.shape[0]
T = np.zeros((N,N))
#solution 1
#ss = 1.0/N**2*np.sum(D**2)
#for i in range(N):
# for j in range(i,N):
# T[i,j] = T[j,i] = -0.5*(D[i,j]**2 -1.0/N*np.dot(D[i,:],D[i,:]) -1.0/N*np.dot(D[:,j],D[:,j])+ss)
#solution 2
#K = np.dot(D,np.transpose(D))
D2 = D**2
H = np.eye(N) - 1/N
T = -0.5*np.dot(np.dot(H,D2),H)
eigVal,eigVec = np.linalg.eig(T)
X = np.dot(eigVec[:,:2],np.diag(np.sqrt(eigVal[:2])))
print(X.shape)
plt.scatter(X[:,0],X[:,1])
plt.show()
print('original distance','\tnew distance')
for i in range(N):
for j in range(i+1,N):
print(np.str(D[i,j]),'\t\t',np.str("%.4f"%np.linalg.norm(X[i]-X[j])))
import numpy as np
A = np.load('mat.npy')
n,m = A.shape
Dist = np.zeros((n,n))
B = np.zeros((n,n))
print(n)
print(m)
for i in range(n):
for j in range(n):
Dist[i][j] = sum((ix-jx)**2 for ix,jx in zip(A[i], A[j]))
disti2 = np.array([0]*n)
print(disti2.shape)
distj2 = np.array([0]*n)
print(distj2.shape)
for x in range(n):
disti2[x] = np.mean([Dist[x][j] for j in range(n)])
distj2[x] = np.mean([Dist[i][x] for i in range(n)])
distij2 = np.mean([Dist[i][j] for i in range(n) for j in range(n)])
for i in range(n):
for j in range(n):
B[i][j] = -0.5*(Dist[i][j] - disti2[i] - distj2[j] + distij2)
w,v = np.linalg.eig(B)
v=v.transpose()
U = [{'eVal':w[i], 'eVec':v[i]} for i in range(n)]
U.sort(key = lambda obj:obj.get('eVal'), reverse = True)
k=4
w=np.array([0]*k)
v=np.zeros((k,n))
print(w)
print(w.shape)
print(v.shape)
print(v)
for i in range(k):
w[i] = U[i].get('eVal')**0.5
v[i] = U[i].get('eVec')
ans = np.dot(v.transpose(), np.diag(w))
print(ans.shape)
print(ans)
ans_dist = np.zeros((n,n))
for i in range(n):
ans_str=""
for j in range(n):
ans_dist[i][j] = sum((ix-jx)**2 for ix,jx in zip(ans[i], ans[j]))
print("Orign dis[][] is :")
print(Dist)
print("MDS dis[][] is :")
print(ans_dist)