Fortran: гибкая фильтрация массивов - PullRequest
1 голос
/ 12 января 2012

in Fortran мы закодировали следующим образом:

!vectors w,q are of the same size
...
w = ...         !a vector of integers [0,...,n)
if (allocated(t)) deallocate(t);
allocate(t(count(w/=0)))
t = pack(q, w/=0)
m = count(t>0)
if (allocated(b)) deallocate(b)
allocate(b(m))
b = pack(t,t>0)

для перевода кода в Python :

t = q[w!=0]
b = t[t>0]

не уверенреализация на Фортране, которую мы сделали, верна.Обратите внимание, что это часть очень большой программы, и мы получаем некоторые раздражающие ошибки во время выполнения, иногда даже нет сообщений, но происходит сбой ...

1 Ответ

2 голосов
/ 12 января 2012

В F2003 объявите t и b как выделяемые векторы и просто напишите:

t = pack(q, w/=0)
b = pack(t,t>0)

Это уже поддерживается несколькими компиляторами, такими как gfortran (GCC 4.6) ifort (набор компиляторов Intel> 11.x)

...