每次迭代时,如何在FORTRAN中将1D数组转换为2D数组的列?

瓦希德

我已经花了整整一个星期的时间。但是我解决不了。

我想在循环中将1D数组转换为2D数组的列。第一次迭代时,此2D数组的大小与1D数组相同。所以。投射它应该没有问题。在第二次迭代中,一维数组将具有不同的元素。我想将其转换为2D数组的第二列。这将继续,并且算法是如此,您无法在开始计算之前猜测2D数组的列数来分配它。

在Matlab中,可以使用如下所示的do循环:

do iter=1:m
p(:,iter) = r
end

但是FORTRAN呢?以下测试代码旨在显示我的意思:

代码1 :(使用指针)

program ptrtest

 real, pointer, CONTIGUOUS :: Mr(:)
 real, pointer, CONTIGUOUS :: Mp(:,:)
 real, DIMENSION(9) ::abc


 integer :: n = 2
 iter=3

 Do i=1,iter

 alpha2 = 2
 allocate(Mr(n**2))
 abc= 42

 Mr(1:n**2) = 0.5 * abc(1:n**2)
 write(*,*) 'Mr='
 write(*,555) Mr

 Mr(1:n**2) => Mp(1:n**2,1:1) 

 WRITE(*,*) 'Mp='
 WRITE(*,555) Mp

 end do

 555  FORMAT(F12.4,1X) 


 end program ptrtest

错误 :

gfortran -Wall -o "1234" "1234.f95" (in directory: /home/vahid/Desktop)
1234.f95:26.15:
 Mr(1:n**2) => Mp(1:n**2,1:1)
               1
Error: Rank remapping target must be rank 1 or simply contiguous at (1)
Compilation failed.

代码2 :(使用简单循环)

program ptrtest

 real, pointer, CONTIGUOUS :: Mr(:)
 real, pointer, CONTIGUOUS :: Mp(:,:)
 real, DIMENSION(9) ::abc


 integer :: n = 2
 iter=3

 Do i=1,iter

 alpha2 = 2
 allocate(Mr(n**2))
 abc= 42

 Mr(1:n**2) = 0.5 * abc(1:n**2)
 write(*,*) 'Mr='
 write(*,555) Mr

 do j = 1, iter
    Mp(:, j) = Mr
 end do

 WRITE(*,*) 'Mp='
 WRITE(*,555) Mp

 end do

 555  FORMAT(F12.4,1X) 


 end program ptrtest

错误:

 Mr=
     21.0000
     21.0000
     21.0000
     21.0000

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7F1F888E4777
#1  0x7F1F888E4D7E
#2  0x7F1F8853CD3F
#3  0x400D67 in MAIN__ at 1234.f95:?
Segmentation fault (core dumped)
chw21

不明白你的意思。我按照您设想的方式进行了尝试:

program vec2mat
    implicit none
    integer :: r(3), m(3, 3), i

    r = (/ 1, 2, 3/)
    do i = 1, 3
        m(:, i) = r
    end do

    write(*, '(3I4)') m

end program vec2mat

它完美地工作:

$ ./vec2mat
   1   2   3
   1   2   3
   1   2   3

(当然,多维数组中的第一个索引变化最快)。

好的,自从我发布此信息以来,您已经添加了更多信息:

DATA已折旧。它仍然有效,但是没有括号:

DATA r/1.1, 2, 3, 4/

但是,如果要r立即初始化,通常最好将其写入变量声明中:

REAL*8, DIMENSION(4) :: r = (/1.1, 2, 3, 4/)

在实际的代码块中,根本不需要使用DATA(我什至不确定它是否允许使用)。只需继续并分配值即可:

ALLOCATE r(4)
r = (/1.1, 2, 3, 4/)

(必须先分配一个可分配的数组,然后才能向其中写入内容。)

最后,ALLOCATE错误似乎很奇怪:

ALLOCATE(p)

无法工作,因为程序不知道要分配多少空间p

ALLOCATE(p(1:4, 1:4))

应该工作正常。

通常,编译器将输出导致错误的整个行,而不是将其缩写为其他内容。因此,假设ALLOCATE行没有改变,我唯一能想到的就是后期DATA(据我所知,DATA应该是声明块的ALLOCATE一部分,并且是指令块的一部分,所以ALLOCATE永远不能在它之前DATA)搞砸了

代替

DATA r(/1.1, 2, 3, 4/)

ALLOCATE(r(4))
r = (/1.1, 2, 3, 4/)

而且你应该很好走。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中将OpenCV 2D矩阵转换为1D数组?

来自分类Dev

在JAVA中将1d数组转换为2d数组

来自分类Dev

如何将2D数组转换为1D数组以在视图中显示

来自分类Dev

如何在Groovy中将2d数组动态转换为3d数组

来自分类Dev

如何在GAS中将3D数组转换为2D数组?

来自分类Dev

如何在C#中将2D数组转换为2D列表

来自分类Dev

如何在JavaScript中将2D数组转换为2D字符串

来自分类Dev

如何在MATLAB中将2D矩阵的单元格数组转换为多维数组

来自分类Dev

如何在C#中将3D数组类型转换为1D数组类型?

来自分类Dev

如何在C#中将2-D数组快速转换为1-D数组?

来自分类Dev

如何在JavaScript中将2D嵌套数组转换为2D单个数组

来自分类Dev

如何在C#中将2D对象数组转换为2D字符串数组?

来自分类Dev

PHP-将2D数组中的一列转换为指定列名的1D数组

来自分类Dev

javascript:如何将两个1D数组转换为2D数组

来自分类Dev

将2D数组转换为相同大小但形状像1D的数组?

来自分类Dev

将列表的1D数组转换为2D数组

来自分类Dev

将2D数组转换为1D数组以创建数据框

来自分类Dev

将点的2D数组转换为1D数组

来自分类Dev

将2D数组转换为1D数组错误

来自分类Dev

numpy:将索引的2D数组转换为1D数组以进行交集计算

来自分类Dev

如何在Python中将2D数组的字符串值转换为整数值?

来自分类Dev

如何在Python中将字符串转换为2d数组?

来自分类Dev

如何在Java中将Set转换为2D数组?

来自分类Dev

Python Pandas-将“ 1D”文件转换为2D数组

来自分类Dev

如何在2D数组中找到1D数组

来自分类Dev

如何在1D数组上使用函数创建2D Numpy数组?

来自分类Dev

Java:如何在1D数组中存储2D数组

来自分类Dev

将1D字节数组转换为2D numpy数组的最快方法

来自分类Dev

Java:将2D数组转换为带有组织和随机数的1D数组

Related 相关文章

  1. 1

    如何在C ++中将OpenCV 2D矩阵转换为1D数组?

  2. 2

    在JAVA中将1d数组转换为2d数组

  3. 3

    如何将2D数组转换为1D数组以在视图中显示

  4. 4

    如何在Groovy中将2d数组动态转换为3d数组

  5. 5

    如何在GAS中将3D数组转换为2D数组?

  6. 6

    如何在C#中将2D数组转换为2D列表

  7. 7

    如何在JavaScript中将2D数组转换为2D字符串

  8. 8

    如何在MATLAB中将2D矩阵的单元格数组转换为多维数组

  9. 9

    如何在C#中将3D数组类型转换为1D数组类型?

  10. 10

    如何在C#中将2-D数组快速转换为1-D数组?

  11. 11

    如何在JavaScript中将2D嵌套数组转换为2D单个数组

  12. 12

    如何在C#中将2D对象数组转换为2D字符串数组?

  13. 13

    PHP-将2D数组中的一列转换为指定列名的1D数组

  14. 14

    javascript:如何将两个1D数组转换为2D数组

  15. 15

    将2D数组转换为相同大小但形状像1D的数组?

  16. 16

    将列表的1D数组转换为2D数组

  17. 17

    将2D数组转换为1D数组以创建数据框

  18. 18

    将点的2D数组转换为1D数组

  19. 19

    将2D数组转换为1D数组错误

  20. 20

    numpy:将索引的2D数组转换为1D数组以进行交集计算

  21. 21

    如何在Python中将2D数组的字符串值转换为整数值?

  22. 22

    如何在Python中将字符串转换为2d数组?

  23. 23

    如何在Java中将Set转换为2D数组?

  24. 24

    Python Pandas-将“ 1D”文件转换为2D数组

  25. 25

    如何在2D数组中找到1D数组

  26. 26

    如何在1D数组上使用函数创建2D Numpy数组?

  27. 27

    Java:如何在1D数组中存储2D数组

  28. 28

    将1D字节数组转换为2D numpy数组的最快方法

  29. 29

    Java:将2D数组转换为带有组织和随机数的1D数组

热门标签

归档