Этого треда уже нет.
Это копия, сохраненная 17 февраля в 01:38.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Это копия, сохраненная 17 февраля в 01:38.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

Пишу расширение для Питона. На Фортране с помощью F2PY, да. Пишу функцию, которая должна принимать кучу аргументов, в т.ч. массив. Как написано в руководстве, и как я всегда делал:
module yoba
contains
subroutine ff(N,AR)
!f2py depend(N) AR
integer,intent(in) :: N
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module
Но аргументов у функции при таком подходе будет штук 10, неудобно. Плюс функция будет вызываться тысячи раз за время исполнения основной программы, а часть аргументов меняться не будет. Поэтому хочется их инициализировать один раз, сохранив данные в пространстве памяти модуля на Фортране в переменных модуля, а потом постоянно дергать из моей функции. Например, хочется так:
module yoba
integer,public :: N
contains
subroutine init(x)
integer :: x
N=x
end subroutine
subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module
GNU Fortran съедает этот код легко и непринуждённо, и позволяет использовать в тестовой программе на Фортране же. А вот F2PY - нет, он орёт, что переменная N не объявлена.
Можно ли заставить F2PY использовать переменные модуля таким образом, или надо обязательно таскать в каждой функции стопяцот аргументов?
module yoba
contains
subroutine ff(N,AR)
!f2py depend(N) AR
integer,intent(in) :: N
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module
Но аргументов у функции при таком подходе будет штук 10, неудобно. Плюс функция будет вызываться тысячи раз за время исполнения основной программы, а часть аргументов меняться не будет. Поэтому хочется их инициализировать один раз, сохранив данные в пространстве памяти модуля на Фортране в переменных модуля, а потом постоянно дергать из моей функции. Например, хочется так:
module yoba
integer,public :: N
contains
subroutine init(x)
integer :: x
N=x
end subroutine
subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module
GNU Fortran съедает этот код легко и непринуждённо, и позволяет использовать в тестовой программе на Фортране же. А вот F2PY - нет, он орёт, что переменная N не объявлена.
Можно ли заставить F2PY использовать переменные модуля таким образом, или надо обязательно таскать в каждой функции стопяцот аргументов?
>>3566938 (OP)
Тебе не то чтобы в /pr/. Тебе даже на двач теперь ходить не надо ради такой ерунды.
Тебе не то чтобы в /pr/. Тебе даже на двач теперь ходить не надо ради такой ерунды.
>>013
За руководство спасибо. Нюанс в том, что массив AR в функции
subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
создаётся в питонокоде и приезжает из него в фортранокод. AR большой и в каждом вызове ff новый, так что тратить на его копирование процессорное время жалко. AR приходится использовать как аргумент ff, а вот N и другие подобные переменные, описывающие размер передаваемых и отдаваемых массивов хочется вынести в COMMON BLOCK
А можно ли в питонокоде присваивать ссылку на массив указателю в COMMON BLOCK, а потом в фортранокоде использовать массив по ссылке?
За руководство спасибо. Нюанс в том, что массив AR в функции
subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
создаётся в питонокоде и приезжает из него в фортранокод. AR большой и в каждом вызове ff новый, так что тратить на его копирование процессорное время жалко. AR приходится использовать как аргумент ff, а вот N и другие подобные переменные, описывающие размер передаваемых и отдаваемых массивов хочется вынести в COMMON BLOCK
А можно ли в питонокоде присваивать ссылку на массив указателю в COMMON BLOCK, а потом в фортранокоде использовать массив по ссылке?
>>013
Что поделать, мне не дают зарегистрироваться на StackOverflow, чтобы там вопрошать
>Тебе не то чтобы в /pr/. Тебе даже на двач теперь ходить не надо ради такой ерунды.
Что поделать, мне не дают зарегистрироваться на StackOverflow, чтобы там вопрошать
Тред утонул или удален.
Это копия, сохраненная 17 февраля в 01:38.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Это копия, сохраненная 17 февраля в 01:38.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.