将功能向右移动不起作用

Posted

技术标签:

【中文标题】将功能向右移动不起作用【英文标题】:Moving the function to the right does not work 【发布时间】:2022-01-19 15:26:13 【问题描述】:

我做了高斯混合模型,效果很好,但是函数没有向右移动。在图中,它显示好像该函数没有移动任何东西。我为 mu 合并了一个 for 循环:

for(i in 1:n)
  for (j in 1:5)
    mu1 = c(1+j,2)
    mu2 = c(6+j,7) 
    .
    .
    .
     
     

但它不起作用。我尝试获取图像中出现的图形:它在保存之前的东西的同时移动,覆盖越来越多的空间

library(MASS)


n = 1000
Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)
rho = 0.5

# Gaussian mixture model
# X=(X1,X2) ~ rho * N(mu1, Sigma) + (1-rho) * N(mu2, Sigma)
X = cbind(rep(0, n), rep(0, n))
for(i in 1:n)
  for (j in 1:5)
    mu1 = c(1+j,2)
    mu2 = c(6+j,7)
    u = runif(1, min = 0, max = 1)
    if(u < rho)
      X[i,] = mvrnorm(1, mu = mu1, Sigma = Sigma)
    else
      X[i,] = mvrnorm(1, mu = mu2, Sigma = Sigma)
    
  


plot(X[,1], X[,2], xlab = 'X1', ylab = 'X2')

【问题讨论】:

似乎在您的内部循环中,X[i, ] 行在每次迭代时都会被覆盖。 j 循环的意义何在? 我也看不懂"我尝试获取图像中出现的图形:它在保存之前的东西的同时移动,覆盖越来越多的空间"。你的意思是你想要一个动画情节?还是一系列情节?还是显示随时间进展的单个图? 当我迭代mu 时,我尝试将 5 次迭代中的每一次保存在 X [i,]` 中。 mu右移时保存分布的数据 @GregorThomas,显示随时间变化的单个图 i 为 1 时,j 在不同的迭代中具有值 1,2,3,4,5。但是对于所有 5 个 j 值,只有一个 i 值,所以 X[i,] 只会有来自 j = 5---X[i,] 的结果每次都会被覆盖。 【参考方案1】:

我已调整您的代码以保存所有 5000 行:

n = 1000  
m = 5
Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)
rho = 0.5

library(MASS)
# Gaussian mixture model
# X=(X1,X2) ~ rho * N(mu1, Sigma) + (1-rho) * N(mu2, Sigma)
X = cbind(rep(0, n * m), rep(0, n * m))
for(i in 1:n)
  for (j in 1:m)
    mu1 = c(1+j,2)
    mu2 = c(6+j,7)
    u = runif(1, min = 0, max = 1)
    if(u < rho)
      X[(i - 1) * m + j,] = mvrnorm(1, mu = mu1, Sigma = Sigma)
    else
      X[(i - 1) * m + j,] = mvrnorm(1, mu = mu2, Sigma = Sigma)
    
  


plot(X[,1], X[,2], xlab = 'X1', ylab = 'X2')

【讨论】:

谢谢@GregorThomar。我真的不明白这部分是如何工作的X[(i - 1) * m + j,]。你能给我解释一下吗?我试图理解它,但我无法理解它 我们做一个小例子:想象一个嵌套循环集n &lt;- 3; m &lt;- 4和循环for(i in 1:n) for(j in 1:m) print(...) 。谜题是在... 中放入一些东西,它会打印出 1、2、3、4、5、6、7、...、12。这就是该谜题的解决方案。我们需要这个序列,以便每个子迭代都有一个唯一的值,因此我们可以将它存储在X 的唯一行中。我最好的理解它的建议是进行实验。 print(i)print(j) 在每次迭代、实验中,都会有意义。 另一种方法是在循环之前使用单独的counter,例如counter &lt;- 1,分配给X[counter, ] &lt;- ...,然后在分配后立即放置counter &lt;- counter + 1 非常感谢您的帮助

以上是关于将功能向右移动不起作用的主要内容,如果未能解决你的问题,请参考以下文章

滑动手势识别器对我不起作用

在 UItableViewCell 中居中 UIImageView 不起作用,如何解决?

wpf 动画 - 鼠标按下事件不起作用

为啥这个简单的动画在 iOS 7 上不起作用?

uilabel sizetofit 不起作用

UIButtons 在向右旋转时起作用,但在向左旋转时不起作用。嗯?