r语言 - 循环矢量化以一次更新所有矢量



如何矢量化此代码片段以一次性更新theta

for (j in 1:length(theta)) {
  val = exp(y * sum(theta * random_data_vector)) * y * random_data_vector[j]
  val = val / (1 + exp(y * sum(theta * random_data_vector)))
  theta[j] = theta[j] - (alpha * val)
}

theta是向量,random_data_vector是向量,y是数字

> dput(head(theta))
c(0.772925310069695, 0.853900654707104, 0.291106897871941, 0.114210048923269, 
0.257764941081405, 0.0881731726694852)
> dput(head(random_data_vector))
c(0, 0, 0, 0, 0, 0)

不需要for循环或索引,因为默认情况下,R 中的数学运算是矢量化的,假设所有向量的长度相同或长度为 1。(例如,默认情况下1:10 + 1矢量化,不需要循环。

val = exp(y * sum(theta * random_data_vector)) * y * random_data_vector
val = val / (1 + exp(y * sum(theta * random_data_vector)))
theta = theta - (alpha * val)

最新更新