【问题标题】:R vectorizing for loops that run on matrixR矢量化在矩阵上运行的循环
【发布时间】:2015-09-04 16:57:11
【问题描述】:

下面的代码为每个等于 1 的矩阵元素分配一个介于 0 到 1 之间的随机值。我的实际矩阵非常大,下面的代码需要很长时间才能运行。我怎样才能让它更快。请注意,每个为 1 的单元格应获得 0 到 1 之间的随机值。我不希望所有单元格获得相同的值

#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

【问题讨论】:

    标签: r matrix vectorization


    【解决方案1】:

    只需要一行:

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

    mat1 == 1 选择矩阵中等于 1 的所有元素。sum(…) 为您提供这些元素的数量,以便runif(…) 可以生成所需数量的随机值。

    最后,通过使用元素赋值(mat1[mat1 == 1] = …),我们只用新生成的随机值替换值为 1 的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-07
      • 2020-10-25
      • 2016-02-11
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多