Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 找出for循环中Mata矩阵中出现最大值的列数_Loops_Matrix_Max_Stata - Fatal编程技术网

Loops 找出for循环中Mata矩阵中出现最大值的列数

Loops 找出for循环中Mata矩阵中出现最大值的列数,loops,matrix,max,stata,Loops,Matrix,Max,Stata,我的目的不是找出最大值是什么,而是找出当对行的整个列元素生成不同的随机数~N时出现最大值的列数 这里的一个潜在问题是,如果同一行中的两个或多个元素包含相同的最大值,该怎么办?我知道这不太可能,因为它们是真实的数字。但我将第一行中的所有元素都预设为零。因此,在第一轮中,所有值都是最大值,并受下一个条件操作的约束 我希望列数在下一轮循环中进行进一步计算 假设所有矩阵在for循环之前都定义得很好,以节省空间 Mata: for (k=1; k<=10; k++){ for (j=1; j<

我的目的不是找出最大值是什么,而是找出当对行的整个列元素生成不同的随机数~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*]
            }

}

非常感谢你的帮助

我无法理解其中的大部分内容-很多内容似乎与您的问题背景无关-但如果问题是查找行向量中最大元素的列索引,则有一种方法:

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

我希望这有点帮助

谢谢你,尼克。我更仔细地研究了一下——选择——并做了一些试验。选择仅适用于向量。假设y是一个矩阵,没有y:==maxy[2,.]这样的东西,你帮了大忙。我为我的无知和傲慢道歉。Statata就是这样一个有用的工具。谢谢你和马丁的帮助。我从你们两个身上得到了灵感和方向。statalist存档也很有用。我之前对select的看法是错误的,它可以来自矩阵,但它一次处理向量。我成功地使用了垂直向量,但没有使用水平向量。如果有机会,我们将继续探索。请阅读我最后的回答代码。再次感谢你,谢谢你。
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=.
   }