您好,我是这里的新手,而Julia 10.3中也是新手。如今,我正在研究不同数字系统中的Storkey学习规则。在我第一次尝试对这种想法进行编码时,我尝试了以下朴素代码:
id status
1 InProgress
2 Completed
3 Pending
这是主要功能和
给出的“本地字段” function storkey_learning_first(U)
# The memories are given by the columns
row,col = size(U)
# First W matrix
W_new = zeros(row,row)
for mu=1:col
W_old = copy(W_new)
for i=1:row
for j=i:row
s = 0.0
# Putting this value in the new matrix
s += U[i,mu]*U[j,mu]
s -= local_field_opt(W_old,U[:,mu],i,j,row)*U[j,mu]
s -= local_field_opt(W_old,U[:,mu],j,i,row)*U[i,mu]
s *= 1/row
W_new[i,j] += s
W_new[j,i] = W_new[i,j]
end
end
end
return W_new
end
然后给定一个n维实值向量,两个代码都创建一个维数为(n x n)的矩阵。对于低维向量,它是有效的。但是对于高维数组,这确实很慢。实际上,我想存储维度n = 8192的向量。而且,我想使用维数较小的复数值向量或四元数,但在实际情况下我做不到更好。在第二次尝试中,我将完整的结构分为两个函数,特别是,我将两个内部循环分开,避免重复调用相同的元素:
function local_field_opt(W_old,U,i,j,row)
hij = 0.0
for k=1:row
if k != i && k != j
hij += W_old[i,k]*U[k]
end
end
return hij
end
与此同时,我获得了几秒钟。在这种情况下,如何改善语法?以及使用复数或四元数:这是否会带来相当大的额外负担?最后,到现在为止,我正在获取维度为n = 1352的向量的此时间标记:
function_inner(U,W_old,W_mu,mu,row)
# Calling one time the column
U_mu = U[:,mu]
for j=1:row
U_j_mu = U[j,mu]
for i=j:row
U_i_mu = U[i,mu]
s = 0.0
s += U_i_mu *U_j_mu
s -= U_i_mu *local_field_opt(W_old,U_mu,j,i,row)
s -= local_field_opt(W_old,U_mu,i,j,row)*U_j_mu
s *= 1/row
W_mu[i,j] += s
W_mu[j,i] = W_mu[i,j]
end
end
return W_mu
end