【问题标题】:Find out the column number in which Maxima occur in a matrix in Mata in a for-loop在 for 循环中找出 Mata 中的矩阵中出现 Maxima 的列号
【发布时间】:2013-04-27 16:21:16
【问题描述】:

我的目的不是找出最大值是多少,而是找出当对行的整个列元素生成不同的随机数〜N时出现最大值的列号。

这里的一个潜在问题是,如果同一行中的两个或多个元素包含相同的最大值,该怎么办?我知道他们不太可能满足于实数。但是我将第一行中的所有元素都预设为零。因此,在第一轮中,所有的值都是最大值,并受制于下一个条件动作。

我希望列号在下一轮循环中做进一步的计算

假设所有矩阵都在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*]
            }

}

非常感谢您的帮助。

【问题讨论】:

    标签: loops matrix max stata


    【解决方案1】:

    我无法理解其中的大部分内容——很多内容似乎与你的问题无关——但如果问题是找到行向量中最大元素的列索引,这里有一种技术:

    : 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  |
           +---------------------+
    

    我希望这会有所帮助。

    【讨论】:

    • 谢谢尼克。我更多地研究了-select-并做了一些试验。 Select() 仅适用于矢量。假设 y 是一个矩阵,则不存在 y :== max(y[2,.])
    • 你非常有帮助。我为我的无知和傲慢道歉。 STATA(MATA) 是一个非常有用的工具。谢谢你和马丁的帮助。我从你们两个那里得到了灵感和方向的焦点。 statalist 档案也很有用。我之前对 select() 的看法是错误的,它可以来自矩阵,但它一次处理向量。我在垂直矢量上取得了成功,但在水平矢量上却没有。有机会会继续探讨这个。请在答案中阅读我的最终代码。再次感谢您,谢谢您。
    【解决方案2】:
    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=.
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多