2013-04-27 36 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=. 
    }