Я из тех людей, которые «пишут Fortran на всех языках», пытаюсь изучить современные методы программирования. У меня есть одномерная функция ft(lx)=HT(x,f(x),lx)
, где x
и f(x)
- одномерные массивы размера nx
, а lx
- размер выходного массива ft
. Я хочу применить HT
к многомерному массиву f(x,y,z)
.
В основном я хочу применить HT
ко всем трем измерениям к go от f(x,y,z)
, определенного на размерной сетке (nx,ny,nz)
, до ft(lx,ly,lz)
, определенного на размерной сетке (lx,ly,lz)
:
ft(lx,y,z) = HT(x,f(x,y,z) ,lx)
ft(lx,ly,z) = HT(y,ft(lx,y,z) ,ly)
ft(lx,ly,lz) = HT(z,ft(lx,ly,z),lz)
В стиле f95 я бы предпочел написать что-то вроде:
FTx=zeros((lx,ny,nz))
for k=1:nz
for j=1:ny
FTx[:,j,k]=HT(x,f[:,j,k],lx)
end
end
FTxy=zeros((lx,ly,nz))
for k=1:nz
for i=1:lx
FTxy[i,:,k]=HT(y,FTx[i,:,k],ly)
end
end
FTxyz=zeros((lx,ly,lz))
for j=1:ly
for i=1:lx
FTxyz[i,j,:]=HT(z,FTxy[i,j,:],lz)
end
end
Я знаю идиомати c Джулии потребуется что-то вроде mapslices
. Я не мог понять, как это сделать go из документации mapslices
.
Итак, мой вопрос: каков будет идиоматический c код Джулии вместе с правильными объявлениями типов, эквивалентный версии в стиле Фортран?
Последующий подвопрос: Можно ли написать функцию
FT = HTnD((Tuple of x,y,z etc.),f(x,y,z), (Tuple of lx,ly,lz etc.))
, которая работает с произвольными размерами? Т.е. он будет автоматически корректировать вычисления для измерений 1,2,3 в зависимости от размеров входных кортежей и функции?