2017-05-27 112 views
0

我製作了一個隨機值10x10的數組。 使用fortran 90.如何在fortran中拆分數組?

編輯:我找到了我的問題的解決方案,將它添加時,它處於更呈現狀態。現在

 real :: x 
     integer, dimension(10,10) :: matrix 
     integer d,f,j,sum 

     do d=1,10 
      do f=1,10 
       call RANDOM_NUMBER(x) 
       j = FLOOR(10*x) 
       matrix(d,f) = j 
       sum= sum + j 
       write(*,*)'RND number', matrix(d,f) 
      end do 
     end do 
     write(*,*)'Sum of all elements in the array: ', sum 

,我想要做的是 - 創建2個新的陣列稱爲數組1和數組2,他們都希望能5×10,幷包含列1-5,而初始陣列的6-10。

此問題我是在較大的分配,這涉及發送新的陣列以從節點(使用MPI),做一些工作與他們,和發送結果返回給主節點的一個步驟。但是這個問題超出了範圍。

+0

我的心情很除非你花時間做功課,爲你顯示一些例子,您嘗試將數組拆分並卡住。 – Holmz

+0

我決定反對,因爲我的方法沒有編譯。我覺得我會被Fortran老兵撕成碎片。 我已經想出了一個簡單的解決方案,我通過在第一5列的所有元素,然後最後5列使用陣列的尺寸參數,並簡單地循環。我以爲我需要創建單獨的數組,但實際上我沒有。 當我的解決方案更加精美時,我會發布答案。 – afaf12

+0

*「我決定不說,因爲沒有我的方法編制。而且我覺得我會用Fortran的退伍軍人得到撕成碎片。」 *我們來到這裏,是因爲我們希望幫助人們與他們的代碼,真的。我們只是不想爲他們編寫代碼。如果你只是想避免關於你的編碼風格的不請自來的建議(我傾向於這樣做),你可以這麼說。 –

回答

1

下一次交了,你做了什麼......

integer, dimension(10,10) :: matrix 
integer, dimension(10, 5) :: trunk 
integer, dimension(10, 5) :: tail 

... 
trunk = matrix(:, 1: 5) 
tail = matrix(:, 6:10) 

還是......也許等價可以工作,這你就必須去嘗試,因爲我可能是錯誤的...

EQUIVALENCE (Matrix,Trunk), (Tail,Matrix(6,1)) 

@Vladimir說,「如果你只是想避免你的編碼風格不請自來的建議(我傾向於給),你可以這麼說。」我也可以這樣做。

SUM絕對是純或純的元素固有的。
我不知道RANDOM_NUMBER ...
但是,這可能是更時尚,你可以省略循環:

Matrix = RANDOM_NUMBER(x) 
WHERE (Matrix <= <somefloor>)... 
mySum = SUM(Matrix) 
+1

我不確定'近似'對於Fortran編碼問題來說是最好的解決方案。我很確定這不是一個好的解決方案。 –

+0

我在標註@HighPerformanceMark評論。 ;) – Holmz