HOWTO · NumPy
NumPy Fatorial
Aprenda a calcular o fatorial dos elementos de uma matriz NumPy usando a função special.factorial() do SciPy em Python, com exemplos de código e explicações dos resultados, incluindo por que os valores são retornados como números de ponto flutuante e como solicitar resultados inteiros exatos.
Nesta página
Calcular o fatorial de números é uma tarefa comum em matemática e programação, especialmente em campos como estatística e combinatória. Em Python, podemos calcular o fatorial dos elementos de uma matriz NumPy usando a função special.factorial() da biblioteca SciPy.
Esta função realiza o cálculo elemento a elemento sobre uma matriz. Quer você esteja trabalhando com um pequeno conjunto de números ou com uma matriz grande, a mesma chamada aplica o fatorial a cada elemento de uma só vez.
Neste artigo, exploraremos como usar a função special.factorial(), fornecendo exemplos claros e explicações para ajudá-lo a compreender este conceito essencial.
O que é um fatorial?
Antes de mergulhar no código, é crucial entender o que é um fatorial. O fatorial de um inteiro não negativo n, denotado como n!, é o produto de todos os inteiros positivos menores ou iguais a n. Por exemplo, 5! é igual a 5 × 4 × 3 × 2 × 1, que é igual a 120. Os fatoriais são amplamente utilizados em permutações, combinações e outros cálculos matemáticos.
Na programação, os fatoriais são frequentemente necessários para cada elemento de uma matriz de uma só vez. É aqui que NumPy e SciPy entram em jogo: special.factorial() aplica a operação elemento a elemento sobre uma matriz.
Usando a função special.factorial() do SciPy
A função special.factorial() da biblioteca SciPy foi projetada para calcular o fatorial de cada elemento de uma matriz. Ela realiza a operação elemento a elemento, portanto uma única chamada lida com uma matriz de qualquer tamanho.
Para usar esta função, você primeiro precisa instalar a biblioteca SciPy, caso ainda não o tenha feito. Você pode fazer isso usando o pip:
pip install scipy
Depois de instalar o SciPy, você pode começar a usar a função special.factorial(). Abaixo está um exemplo simples para demonstrar como calcular o fatorial de uma matriz de inteiros.
import numpy as np
from scipy import special
arr = np.array([0, 1, 2, 3, 4, 5])
factorials = special.factorial(arr)
print(factorials)
Output:
[ 1. 1. 2. 6. 24. 120.]
Neste exemplo, primeiro importamos as bibliotecas necessárias: NumPy e o módulo special do SciPy. Criamos uma matriz NumPy contendo inteiros de 0 a 5. Ao passar esta matriz para a função special.factorial(), obtemos os fatoriais desses números. A saída mostra os respectivos fatoriais como números de ponto flutuante, que é o comportamento padrão da função.
Calculando fatoriais para matrizes grandes
A mesma chamada funciona inalterada para matrizes maiores.
Vamos ver um exemplo em que calculamos o fatorial para um intervalo maior de números.
large_arr = np.arange(10, 21) # Array from 10 to 20
large_factorials = special.factorial(large_arr)
print(large_factorials)
Output:
[3.62880000e+06 3.99168000e+07 4.79001600e+08 6.22702080e+09
8.71782912e+10 1.30767437e+12 2.09227899e+13 3.55687428e+14
6.40237371e+15 1.21645100e+17 2.43290201e+18]
Neste caso, criamos uma matriz contendo inteiros de 10 a 20 usando np.arange(). A função special.factorial() calcula o fatorial de cada elemento desta matriz, sem a necessidade de escrever um loop. A saída é exibida em notação científica devido ao grande tamanho dos números.
Por que os resultados são números de ponto flutuante
Observe novamente as saídas acima: os fatoriais voltam como números de ponto flutuante — 120. em vez de 120, e os resultados maiores em notação científica. Esse é o comportamento padrão de special.factorial(): ela retorna seus resultados como valores de ponto flutuante, mesmo quando cada entrada é um inteiro.
Os números de ponto flutuante têm precisão limitada, portanto, para fatoriais muito grandes, o valor retornado é o número de ponto flutuante representável mais próximo, e não o inteiro exato. Se você precisar de resultados inteiros exatos, passe exact=True:
arr = np.array([0, 1, 2, 3, 4, 5])
exact_factorials = special.factorial(arr, exact=True)
print(exact_factorials)
Output:
[ 1 1 2 6 24 120]
Com exact=True, as mesmas entradas retornam inteiros sem ponto decimal, como mostra a saída. Escolha a forma padrão quando resultados de ponto flutuante forem aceitáveis para o seu cálculo, e a forma exata quando o valor inteiro preciso for importante.
Conclusão
Em resumo, a função special.factorial() da biblioteca SciPy calcula fatoriais elemento a elemento sobre uma matriz NumPy em Python. Quer você esteja trabalhando com uma matriz pequena ou grande, a mesma chamada se aplica, e os resultados voltam como números de ponto flutuante por padrão, com resultados inteiros exatos disponíveis passando exact=True. Compreender como calcular fatoriais não apenas ajuda em cálculos matemáticos, mas também abre portas para tópicos mais avançados em estatística e ciência de dados.
FAQ
-
Qual é o fatorial de um número?
O fatorial de um inteiro não negativo n é o produto de todos os inteiros positivos menores ou iguais a n, denotado como n!. -
Como instalo o SciPy?
Você pode instalar o SciPy usando o pip com o comando pip install scipy. -
Por que os resultados são mostrados como números de ponto flutuante?
Por padrão, a função special.factorial() retorna valores de ponto flutuante, mesmo para entradas inteiras, portanto resultados grandes são impressos em notação científica. -
Como posso obter fatoriais inteiros exatos em vez disso?
Passe exact=True para a função special.factorial(), como mostrado na seção de ponto flutuante acima. -
Qual formato de saída o special.factorial() retorna?
A saída é retornada como números de ponto flutuante por padrão.