我已經編寫了一個代碼,以我需要的格式讀取和打印一組streamflow值。矩陣內特定位置的計算
基本上所有的數據都是以1020行和320列存儲在一個矩陣中的。它可以是一個較小的矩陣,也就是說,如果我沒有那麼多的流量值,但它永遠不會比這更大。
每一行都是特定年份中的特定月份。 1號線是1931年1月,1020號線是2015年12月,從1號到320號的每一列代表一個測量站(GS)。
我現在需要計算每個GS在整個時間序列中同一個月的平均值。爲了清除對此前陳述的任何懷疑,我會給你一個例子。
我需要1月份的GS#1在整個時間軸上的平均流量值,所以我需要總結Jan.1931 + Jan.1932 + Jan.1933 + ... + Jan.2015,然後除以在這種情況下,(2015-1931 + 1)= 85年。所有這些對於同一個GS,在這個例子中是#1。
我不能混合GSs,所以代碼必須重複這個操作,每個GS,顯然,每個月。最後,我將爲每個GS獲得1931年至2015年每個月的平均流量值。
這是我的想法。我可以將其存儲爲一個列向量,並將相同GS的流向值存儲在行中;所以我會有一個(12x1)向量,其中每一行都是流量值,第一行是1月份的平均流量值,第12行是12月份的平均流量值。但是,這必須針對每個GS因此,我在它的最後有320個列向量(12x1)。例如,它看起來像是GS1。
avgGS1 : avgJan
avgFeb
avgMar
...
avgDec
然後我想我也可以將這些信息存儲在維度等於(1x320)的行向量中。在這種情況下,我將有一個矢量用於存儲Jan的所有平均流量值,另一個用於2月,另一個用於3月,直到12月的最後一個。
知道,我從矩陣讀取數據顯示排序是這樣的:
GS1 GS2 GS3 GS4 G5 ... G320
Jan.1931
Feb.1931
Marc.1931
...
Jan.1932
Feb.1932
...
Dec.2015
我存儲我的12個載體是這樣的:
GS1 GS2 GS3 ... GS320
avg.Jan (a b c ... n)
avg.Feb (d e f .... m)
...
avg.Dec (g h i ... o)
的問題是,我可以沒有想到一種能夠自動完成的方法。我到任何做任何代碼,這個最接近的是:
real*4 i, q(1020,320), sumqjan(320), avgqjan
i=0
sumqjan=0
do i=1,1020, 12
sumqjan = sumqjan + (q(i,gsnumber), gsnumber=1,320)
enddo
avgqjan= sumqjan/(numbofyears)
我是從第一行到最後一行進入一個變量,sumqjan是所有河流流量值的總和 - 這裏所謂的Q-一月而avgqjan是包含每個單一GS的320個平均Q值的向量。在我的do循環中,我有12的增量。這是因爲如果我知道第一行是Jan,如果我添加12,那麼我總是會得到另一個1月流量值。
我接着
i=0
sumqfev=0
do i=2,1020, 12
sumqfeb = sumqfeb + (q(i,gsnumber), gsnumber=1,320)
enddo
avgqfeb= sumqfeb/(numbofyears)
在上面這個例子中,我執行我做了一月相同的計算,但是,我的我變的開始。2.如果我知道我的下聯是二月,每行我會從2月份開始,只要我在do循環中加入12。
我重複這個過程每個月,但它看起來並不理想。我正在尋找方法來執行這些計算並更快地存儲這些值。
我會在這裏發佈我的代碼,但它不是我唯一的作者,因此我無法分享它的豐富。
如果您知道解決方案或有一個可行的想法,請繼續並分享它。我感謝幫助!非常感謝。
非常感謝您的貢獻!我會盡力而爲, –