Re: [問題] 如何開一個每列長度不同的矩陣?

看板Fortran作者 (我是鄉民)時間6年前 (2017/11/29 07:55), 6年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
type row !宣告自訂型態row。 real,dimension(:),allocatable :: a !型態是row的變數將會有一個長度尚未確定 end type row !的一維浮點數陣列a。 type(row),dimension(3) :: y !宣告一個長度為3、型態是row的一維陣列y。 allocate(y(1)%a(2)) !陣列y的每個元素都是row的型態。把y(1)的內容用allocate allocate(y(2)%a(3)) !定義陣列a的長度為2;y(2)的陣列a的長度定義為3; allocate(y(3)%a(4)) !y(3)的陣列的a的長度定義為4。 y(1)%a(:)=(/1.2, 3.1/) y(2)%a(:)=(/0.1, 0.2, 0.4/) y(3)%a(:)=(/1.0, 2.0, 3.0, 4.0/) 1 2 3 配合迴圈可以只儲存下三角矩陣,例如有個5x5矩陣 Z = 4 5 6 type row 7 8 9 10 integer,dimension(:),allocatable :: n 11 12 13 14 15 end type row type(row),dimension(5) :: Z integer :: i,j,n !這裡的整數n和自訂型態row裡的n不會有定義模糊的問題。 n=0 do i=1,5 allocate(Z(i)%n(i)) !定義每列的長度 do j=1,i n=n+1 Z(i)%n(j)=n !把數值存起來 enddo enddo ※ 引述《daumda (行不行)》之銘言: : 大家好 : 想請教大家如何宣告一個長度不同的矩陣 : 一般來說矩陣都是宣告成n*n*n... : 我今天有一組資料,裡面各組的長度並不相同 : 例如3組資料,每組各有2,3,4個數值 : 請問要如何使用allocate呢? : 我第一次有這樣需求 : 目前只有最笨的方法,應該是直接開一個遠大於資料長度的矩陣 : 比如例子中使用a(10,3) : 請問大家有別種作法嗎? : 謝謝大家不吝指教! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 129.12.198.140 ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1511913338.A.C9F.html 好像有人看了還沒完全弄懂,所以補上一些註解。 ※ 編輯: PTT0207445 (129.12.197.57), 03/22/2018 08:34:54
文章代碼(AID): #1Q7VTwoV (Fortran)
文章代碼(AID): #1Q7VTwoV (Fortran)