Fortran Coder

查看: 7672|回复: 7
打印 上一主题 下一主题

[线性代数] 请教关于矩阵增加及删除行、列的问题

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2015-1-17 21:36:34 | 显示全部楼层
数组是没有办法改变大小的。

间接的办法包括:

1.用两个数组。
Real :: a(3,4) , b(2,4)
b(1,:) = a(1,:)
b(2,:) = a(3,:)
这样b就相当于a删除了一列

2.用两个可分配数组。方法类同上面的。但可以实现缩减后还是 a

3.用一个可分配数组,一个指针:
[Fortran] 纯文本查看 复制代码
program www_fcode_cn
  Implicit None
  Integer , target :: a(3,4)
  Integer , pointer :: p(:,:)
  a(:,:) = reshape( (/1,2,3,4,5,6,7,8,9,10,11,12/) , (/3,4/) )
  p=>a
  write(*,99) p
  a(:,2:3) = a(:,3:4)
  p=>a(:,1:3)
  write(*,99) p
99 format(4(3i5,/))  
end program www_fcode_cn


4.用串表,类似于指针,但更复杂一些。

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2015-1-20 09:02:07 | 显示全部楼层
1.数组没有行列之分,哪个维度是行,哪个维度是列,完全取决于你如何输出。
2.不对。spread用于数组的复制扩展,而非扩展一行或一列。比如:
  a = (/1,2,3,4/)
  b = spread( a , 1 , 2 )
  则 b = (/1,2,3,4/)
         (/1,2,3,4/)
  而 b = spread( a , 2 , 2 )
  则 b = (/1,1/)
         (/2,2/)
         (/3,3/)
         (/4,4/)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-17 12:28

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表