Fortran Coder

查看: 15000|回复: 6
打印 上一主题 下一主题

[求助] 关于矩阵转置的尝试

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
跳转到指定楼层
楼主
发表于 2020-7-21 20:59:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
试着写了下用于N*N矩阵的转置

forall (i = 1:N, j = 1:N) X(i,j) = X(j,i)

但是不知道是否正确,因为不知道如何查看矩阵,所以想请教一下这一段的思路是否正确,以及fortran有没有直观显示矩阵的输出方式


比如像这样3*3

1 2 3
4 5 6
7 8 9

的形式
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
7#
发表于 2020-7-24 08:35:29 | 只看该作者
2x 代表输出2个空格。
2(2x,f0.8) 代表括号里的格式重复2次。

多看书~

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
6#
 楼主| 发表于 2020-7-23 16:26:29 | 只看该作者
liudy02 发表于 2020-7-23 07:58
这是fortran的 I/O格式啊……
i4是以四个空格的宽度显示整数,10是连续10个的意思
因为后面的矩阵中元素 ...

谢谢指点!正好也看到这一部分了,其中一个例子
[Fortran] 纯文本查看 复制代码
write(11, '(2x, f0.8, 2x, f0.8)' )  x, y

我理解是输出到11号文件,f0.8是默认宽度,小数点后8位,但是2x代表什么呢

还有一种写法
[Fortran] 纯文本查看 复制代码
write(11, '( 2(2x, f0.8) )' ) x, y

似乎和上面是等效的,那这个2(2x, f0.8)是不是表示(2x, f0.8)重复一遍啊

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
5#
发表于 2020-7-23 08:31:05 | 只看该作者
输出二维数组比较“流行”的写法是:
[Fortran] 纯文本查看 复制代码
Do i = 1 , size(array,2)
  write( * , '(*(i4,1x))' ) array(:,i)
End Do

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
地板
发表于 2020-7-23 07:58:56 | 只看该作者
爾果 发表于 2020-7-22 20:07
翻例题的时候发现一种写法

write( * , '(10i4)' ) array

这是fortran的 I/O格式啊……
i4是以四个空格的宽度显示整数,10是连续10个的意思
因为后面的矩阵中元素数量多于10个,就会重复用10i4的格式输出,每一次一行
对于固定大小的矩阵倒是可以这么用,但是如果是不定大小的矩阵就很麻烦了
那样还需要用一段代码来产生类似于 "(nI4)"的格式,n是个整数变量
我感觉,实则不如内循环语句好

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
板凳
 楼主| 发表于 2020-7-22 20:07:54 | 只看该作者
liudy02 发表于 2020-7-22 02:09
矩阵转置有现成的transpose函数,没必要自己写吧?
至于显示,确实没有什么好办法,只能自己写代码显示 ...

翻例题的时候发现一种写法

write( * , '(10i4)' ) array

可以直接显示一个10*10的矩阵,感觉很历害,请教下这种写法里面'(10i4)'代表什么啊

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
沙发
发表于 2020-7-22 02:09:49 | 只看该作者
矩阵转置有现成的transpose函数,没必要自己写吧?
至于显示,确实没有什么好办法,只能自己写代码显示
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 16:31

Powered by Tencent X3.4

© 2013-2024 Tencent

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