2015-09-04 76 views
1

下面的代碼爲每個等於1的矩陣元素分配一個0到1之間的隨機值。我的實際矩陣非常大,下面的代碼需要很長時間才能運行。我怎樣才能讓它更快。請注意,每個是1單元應該得到0之間的隨機值設爲1。我不希望所有的細胞得到一個相同的值R矢量化,用於在矩陣上運行的循環

#convert black pixels to a random color between 0 to 1 

mat1=matrix(c(1,1,0,0.5,1,0.4),nrow=2) 
collection=c() 
value=0 
mat1 
mat1==1 
for (counter1 in (1:nrow(mat1))) 
{ 
    for (counter2 in (1:ncol(mat1))) 
    { 
    if(mat1[counter1,counter2]==1){value=runif(1,0,1);mat1[counter1,counter2]=value;collection=c(collection,value)} 
    } 
} 
mat1 

回答

2

一號線是所有的需要:

mat1[mat1 == 1] = runif(sum(mat1 == 1), 0, 1) 

mat1 == 1選擇矩陣中等於1的所有元素。sum(…)爲您提供了這些元素的數量,以便runif(…)可以生成所需數量的隨機值。

最後,通過使用元素賦值(mat1[mat1 == 1] = …),我們只用新生成的隨機值替換值爲1的元素。