Частой задачей является формирование массива, который содержит переменную, возведенную в комбинацию степеней.Если p - последовательность 1,2,3, тогда я мог бы хотеть X ^ {p (k) + p (l)} для k, l = 1,2,3. Это MWE делает именно это:
Program Main
use, intrinsic :: iso_c_binding
implicit none
integer(c_int) :: p(3)=(/0,1,0/)
integer(c_int) :: arrayP(3,3)
integer(c_int) :: krow,kcol
real(c_double) :: arrayR(3,3)
arrayP=spread(p,1,3)+spread(p,2,3)
do krow=1,3
write(*,*)(arrayP(kcol,krow),kcol=1,3)
end do
arrayR=2.0d0**arrayP
! write array as three frames side by side
do krow=1,3
write(*,fmt="(3(1pe10.2))")(arrayR(kcol,krow),kcol=1,3)
end do
End Program Main
Вывод:
0 1 0
1 2 1
0 1 0
1.00E+00 2.00E+00 1.00E+00
2.00E+00 4.00E+00 2.00E+00
1.00E+00 2.00E+00 1.00E+00
Мне нужно расширить это до трехмерного массива, чтобы найти X ^ {p (k) + p (l)} + p (m)} для k, l, m = 1,2,3 Очевидное расширение того, что у меня есть в MWE:
integer(c_int) :: arrayP(3,3,3)
arrayP=spread(p,1,3)+spread(p,2,3)+spread(p,3,3)
, не работает, потому что вы не можете распределить массив в более чем n + 1 измерениях, гдеn - ранг p, в данном случае 1. Ни вопросы 21010295, ни 31573252 не решают эту проблему.Предложения?