Introdução
Fortran, uma das linguagens de programação mais antigas, ainda desempenha um papel vital na computação científica moderna. Embora muitos possam considerá-la obsoleta, ela continua sendo uma escolha popular para aplicações que exigem alto desempenho, especialmente em áreas como simulações numéricas e processamento de dados científicos. Com o surgimento de linguagens como Python, que oferecem flexibilidade e uma vasta gama de bibliotecas, a integração de Fortran com Python tornou-se uma prática comum. Neste tutorial, iremos explorar como você pode utilizar o F2PY, uma ferramenta que faz parte do NumPy, para facilitar a chamada de códigos Fortran a partir de Python. Além disso, discutiremos como integrar esses códigos a frameworks de machine learning para aproveitar ao máximo o desempenho do Fortran e a simplicidade do Python.
Etapas
Preparação do Ambiente
Certifique-se de ter o Fortran e Python instalados em seu sistema. Para compilar o código Fortran, você precisará do gfortran, que faz parte do GCC. Além disso, instale o NumPy, que contém o F2PY, usando o pip: `pip install numpy`.
commands# Verifique se o gfortran está instalado
gfortran --version
# Instale o NumPy
pip install numpyCriação de um Código Fortran Simples
Crie um arquivo `hello.f90` contendo um código Fortran simples que calcula a soma de dois números. Este código será chamado a partir do Python.
hello.f90subroutine add_numbers(a, b, result) implicit none real :: a, b, result result = a + b end subroutine add_numbers
Compilação do Código Fortran Usando F2PY
Compile o código Fortran usando o F2PY, que permite a criação de um módulo Python a partir do seu código Fortran. Execute o seguinte comando no terminal:
commandsf2py -c -m hello_module hello.f90
Escrevendo o Código Python para Chamar o Fortran
Crie um arquivo Python `main.py` onde você importará o módulo gerado e chamará a sub-rotina que adiciona os números. O uso de Try/Except assegura que qualquer erro seja tratado.
main.pyimport numpy as np import hello_module def main(): a = 5.0 b = 3.0 result = np.zeros(1) hello_module.add_numbers(a, b, result) print(f'A soma é: {result[0]}') if __name__ == '__main__': main()
Executando o Código Python
Depois de ter escrito o arquivo `main.py`, você pode executá-lo usando o Python. Isso chamará a sub-rotina Fortran que calcula a soma e imprime o resultado.
commandspython main.py
Integrando o Fortran com Frameworks de Machine Learning
Como um exemplo, vamos integrar o Fortran a um modelo simples de machine learning usando o scikit-learn. Primeiro, crie uma função em Fortran para calcular a média e a variância de um vetor de números, e depois utilize esta função em Python para calcular as estatísticas de um conjunto de dados.
statistics.f90subroutine stats(arr, n, mean, variance) implicit none real, dimension(:) :: arr integer :: n real :: mean, variance integer :: i mean = sum(arr) / n variance = sum((arr - mean)**2) / n end subroutine stats
Compilando o Código Fortran de Estatística
Compile o novo código Fortran de estatísticas da mesma forma que fez anteriormente, usando o F2PY. Isso permitirá que você chame a sub-rotina na análise de dados em Python.
commandsf2py -c -m stats_module statistics.f90
Escrevendo o Código Python para Chamadas Estatísticas
Modifique o arquivo `main.py` para incluir a chamada da nova sub-rotina de estatísticas, passando um vetor de dados aleatórios para obter a média e a variância.
main.pyimport numpy as np import stats_module np.random.seed(0) data = np.random.rand(100) mean = np.zeros(1) variance = np.zeros(1) stats_module.stats(data, len(data), mean, variance) print(f'A média é: {mean[0]}, e a variância é: {variance[0]}')
Executando o Código para Estimativas Estatísticas
Execute o código Python para calcular a média e variância dos dados aleatórios gerados e observe os resultados.
commandspython main.py
Conclusão
Neste tutorial, exploramos como integrar o Fortran com o Python utilizando o F2PY, possibilitando que utilizemos o desempenho superior do Fortran em conjunto com a flexibilidade do Python. Aprendemos a implementar e compilar códigos Fortran, e a utilizá-los para aplicações de machine learning através da integração com bibliotecas populares como o NumPy e scikit-learn. Esta abordagem permite não apenas a reutilização de código legado em Fortran, mas também a potencialização dos projetos de machine learning, unindo o melhor de dois mundos.