作者PTT0207445 (我是乡民)
标题Re: [问题] 如何开一个每列长度不同的矩阵?
时间Wed Nov 29 07:55:36 2017
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://webptt.com/cn.aspx?n=bbs/Fortran/M.1511913338.A.C9F.html
好像有人看了还没完全弄懂,所以补上一些注解。
※ 编辑: PTT0207445 (129.12.197.57), 03/22/2018 08:34:54