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