2013-04-27 56 views
0

我的目的不是找出最大值是什么,而是产生不同随机数时最大值出现的列号(S)数字〜N到行的整个列元素。找出最大值出现在Mata矩阵中的列号在for循环中

这里一个潜在的问题是如果同一行中的两个或多个元素包含最大值相同的值?我知道他们的内容不太可能是真实的数字。但我将第一行中的所有元素都设置为零。因此,在第一轮中,所有值都是最大值,并受到下一个条件操作的影响。

我会想列数(S)做进一步的计算下一轮循环

的假设所有的矩阵for循环之前被明确定义在这里节省空间。

Mata: 
for (k=1; k<=10; k++){ 
for (j=1; j<=20; i++){ 
A[k,j]= sum[k,j] \ count [1,j] 
} 
    Choose max A[k,j] 
    For that j* for max A[k,j*] to occur 
     {count[1,j*]=count[1, j*+1] 
      y= rnormal(1,1,x,5) 
      C[k,j*]=y 
      sum[k,j*]=sum[k,j*]+c[k,j*] 
      } 

} 

非常感谢您的帮助。

回答

0

我不能跟随大多数 - 很多人似乎是与你的问题相关的背景 - 但如果问题是要找到行向量中最大元素的列索引,下面是一种技巧:

: y = rnormal(1,10,0,1) 

: y 
        1    2    3    4    5 
    +---------------------------------------------------------------------------- 
    1 | .3660763572 .4824003439 -.4441589685 .4314199623 -1.422563986 
    +---------------------------------------------------------------------------- 
        6    7    8    9    10 
    ----------------------------------------------------------------------------+ 
1 -1.226056129  1.18790502 -.4106889581 1.024620896 1.092570732 | 
    ----------------------------------------------------------------------------+ 

: select((1..10), (y :== max(y))) 
7 

(后下)

我没有试图从整体上把握的你正在尝试做的,但你在做你才刚刚开始学习一门语言非常大胆断言。

通常,select()将采用矩阵作为第一个参数。

具体来说,在识别矩阵中的最大值时没有问题。

: y = rnormal(5,5,0,1) 

: max(y) 
2.001071729 

: y :== max(y) 
     1 2 3 4 5 
     +---------------------+ 
    1 | 0 0 0 0 0 | 
    2 | 0 0 0 0 1 | 
    3 | 0 0 0 0 0 | 
    4 | 0 0 0 0 0 | 
    5 | 0 0 0 0 0 | 
     +---------------------+ 

我希望有点帮助。

+0

谢谢尼克。我越来越注意 - 选择 - 并做了一些试验。 Select()仅适用于矢量。假设y是一个矩阵,那么就不存在y:== max(y [2 ,.]) – Joey 2013-04-27 17:56:50

+0

你非常有帮助。我为我的无知和傲慢道歉。 STATA(MATA)是一个非常有用的工具。谢谢你和马丁的帮助。我从你们两位获得了灵感和方向。 statalist档案也是有用的。 之前我错了select(),它可能来自矩阵,但它一次处理向量。我用垂直矢量而不是水平矢量成功了。如果有机会将继续探讨。请在回答中阅读我的最终代码。 再一次,谢谢你,谢谢你。 – Joey 2013-04-28 07:04:11

0
for (k=2; k<=n; k++){ 
    for (j=1; j<=50; j++){ 
     Ri[k,j]= sumAi[1,j]/count[1,j] 
    }  
    Maxj= select((1..50), (Ri[k,]:==max(Ri[k,]))) 
    count[1,Maxj]=count[1,Maxj]+1 
    y= rnormal(1,1,x,5) 
    Ai[k,Maxj]=y 
    sumAi[1,Maxj]=sumAi[1,Maxj]+y 
    Maxj=. 
    }