В Python:
def select(x): y = [] for e in x: if e!=0: y.append(e) return y
который работает как:
x = [1,0,2,0,0,3] select(x) [1,2,3]
для перевода в Fortran:
function select(x,n) result(y) implicit none integer:: x(n),n,i,j,y(?) j = 0 do i=1,n if (x(i)/=0) then j = j+1 y(j) = x(i) endif enddo end function
Вопросы находятся в Фортране:
1- как объявить y (?)?
2- как объявить предопределенные значения для x
3- как избежать информации о размере n
для 1, если он определен как y (n), выход будет:
x = (/1,0,2,0,0,3/) print *,select(x,6) 1,2,3,0,0,0
что нежелательно!
! -------------------------------
Комментарии:
1 -. Все приведенные ответы полезны в этом сообщении. Специально M.S.B и eryksun's.
2 - Я попытался адаптировать идеи для своей проблемы и скомпилировать с помощью F2Py
, однако это не удалось. Я уже отлаживал их с помощью GFortran, и все они были успешными. Это может быть ошибка в F2Py
или что-то, что я не знаю об использовании его должным образом. Я попытаюсь рассмотреть этот вопрос в другом сообщении.
Update: Связанный вопрос можно найти на здесь.