배열 할 수있는 큰 할당 가능한 벡터들을 어떻게 Fortran의 배열에 결합 할 수 있습니까? 어레이가 일 때 reshape
을 사용하여 복사 및 재 형성을 피하고 싶습니다.Fortran : 복사 및 재 형성없이 배열에 할당 가능한 벡터를 결합
program test_equiv
integer x(10), y(10), z(10), xyz(10,3)
equivalence (x, xyz(1,1))
equivalence (y, xyz(1,2))
equivalence (z, xyz(1,3))
x = 1
y = 2
z = 3
! and we can use just normal array syntax
print *, xyz(3,:)
end program
이 의지하지만, 할당 가능한 배열 작동하지 : 내가 달성하고자하는 효과는 포트란의 equivalence
는 설명하기 위해처럼입니다. 매트릭스의 벡터에 액세스하는 경우 포인터를 통해 쉽게 구현할 수 있습니다. 하지만 어떻게 벡터를 2 차원 배열로 결합 할 수 있습니까?
program test_arofpntrs
implicit none
integer :: i
integer, allocatable, target :: xs(:), ys(:), zs(:)
type t_p_xs
integer, pointer :: p_xs(:)
end type t_p_xs
type(t_p_xs), allocatable :: coords(:)
allocate(coords(3), xs(10), ys(10), zs(10))
xs = 1
ys = 2
zs = 3
coords(1) % p_xs => xs
coords(2) % p_xs => ys
coords(3) % p_xs => zs
print *, coords(1) % p_xs(:)
! this fails:
!print *, coords(:) % p_xs(1)
end program
이 못생긴 하나는 XS (i)를 액세스 할 수 없습니다, YS (I), ZS (I) : 지금까지 난 단지 문제가 포인터의 배열에왔다. 사본없이 원하는 것을 할 수 있습니까?
이 의심스러운 점을 이해해 주시기 바랍니다. – beetleboom