2015-09-04 71 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的元素。