R語言使用column-major-order數組。更改for循環順序可以提高性能。因爲這樣,您可以更加連續地訪問內存,從而實現CPU緩存的優勢。
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))
}
}
請給出一個[可重現的例子](http://stackoverflow.com/a/5963610/1412059)你現在正在用'for'循環做什麼。答案將取決於你在循環內進行的計算。 – Roland
@羅蘭改變了它。 –
它仍然不可重複,因爲我們沒有'entrywise.norm'和'data'。 – Roland