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

作者: PTT0207445 (我是鄉民)   2017-11-29 07:55:36
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)
: 請問大家有別種作法嗎?
: 謝謝大家不吝指教!

Links booklink

Contact Us: admin [ a t ] ucptt.com