import numpy as np
seed=np.array([[1.1,3.2],[2,2]])
seed
def extend_row_(row):
DEBUG=False
new_elem=np.array([np.sum([ i*np.sin(elem) for i,elem in enumerate(row) ])])
if DEBUG: print(new_elem)
if DEBUG: print(row)
res=np.concatenate((row,new_elem))
if DEBUG: print(res)
return res
Lazy computation https://en.wikipedia.org/wiki/Lazy_evaluation#Python
list(range(4))
map(lambda x: extend_row(x),seed)
extra_colum=list(map(lambda x: extend_row_(x),seed))
extra_colum
np.transpose(extra_colum)
extra_colum_row=list(map(lambda x: extend_row_(x),np.transpose(extra_colum) ))
extra_colum_row
def fromNtoNplus1(seed):
extra_colum=list(map(lambda x: extend_row_(x),seed))
extra_colum_row=list(map(lambda x: extend_row_(x),np.transpose(extra_colum) ))
return np.transpose(extra_colum_row)
def makeNxN(seed,N=6,DEBUG=False):
'''
N number of new dimensions to add to the seed matrix
'''
new=fromNtoNplus1(seed)
if DEBUG: print(new)
if DEBUG: print('N=',N)
for i in range(N):
if DEBUG: print('i=',i)
if DEBUG: print('~~~~~~~~~~~~~~~~~')
if DEBUG: print(new.shape)
new=fromNtoNplus1(new)
if DEBUG: print(new)
return new
makeNxN(seed,N=2)
def fofMatrix(matrix,*Rn,DEBUG=False):
res=0
for xS in enumerate(matrix):
j=xS[0]
for x in enumerate(xS):
i=x[0]
if DEBUG: print('element=',i,j)
if i!=j and i<j:
res+=Rn[i]*Rn[j]*matrix[i,j]
if i==j:
res+=Rn[i]*matrix[i,j]
return res
seed
def generate(nP=10,nDim=3):
return np.random.rand(nP,nDim)
fofMatrix(makeNxN(seed,N=2),*np.random.rand(5))
fofMatrix(makeNxN(seed,N=2),*np.random.rand(5))
fofMatrix(makeNxN(seed,N=2),*np.random.rand(15))