R 语言使用列主序数组。更改 for 循环顺序可以提高性能。因为这样,您可以以更连续的形式访问内存,从而实现 cpu-cache 优势。
for(y in 1:dim) //outer is y now
{
for(x in 1:dim) //now x is count inside
{
matrix[x,y]=exp(-entrywise.norm(data[,x]-data[,y],2))
}
}
你的“矩阵”是二维数组对吗?
如果您需要更快的速度,您可以展开一些内部循环以减少 cpu 的分支负载和更好的缓存/预取。
for(y in 1:dim)
{
for(x in 1:(dim/8)) //lets imagine dimension is a multiple of 8
{
matrix[x,y]=exp(-entrywise.norm(data[,x]-data[,y],2))
matrix[x+1,y]=exp(-entrywise.norm(data[,x+1]-data[,y],2))
matrix[x+2,y]=exp(-entrywise.norm(data[,x+2]-data[,y],2))
matrix[x+3,y]=exp(-entrywise.norm(data[,x+3]-data[,y],2))
matrix[x+4,y]=exp(-entrywise.norm(data[,x+4]-data[,y],2))
matrix[x+5,y]=exp(-entrywise.norm(data[,x+5]-data[,y],2))
matrix[x+6,y]=exp(-entrywise.norm(data[,x+6]-data[,y],2))
matrix[x+7,y]=exp(-entrywise.norm(data[,x+7]-data[,y],2))
}
}