Ciência de Dados

Como calcular matrizes em Python sem NumPy

Como calcular matrizes em Python sem NumPy
Para muitas aplicações, você precisa de matemática. Em Python existe o módulo matemático que lida com o básico, como arredondamento, fatorial e funções de arredondamento. Também inclui funções de potência e logarítmica, trigonometria, angulares e hiperbólicas. Para números complexos, o módulo é cmath. No entanto, eles não lidam com operações de matriz.

Qual é a diferença entre matrizes e matrizes?

Algumas pessoas estão procurando soluções de matriz para problemas de array, então qual é a diferença?  A grande diferença é que os valores da matriz são números, uma matriz pode conter outras informações, até mesmo strings.  As matrizes podem representar equações, é aqui que a maioria dos desenvolvedores precisa delas, pelo menos no caso de substituição de NumPy.

Como você faz um cálculo de matriz?

As operações de matriz padrão são simples de fazer, ao adicionar você apenas adiciona os elementos, ao multiplicar você pode usar um escalar para cada elemento e assim por diante.

A multiplicação é um pouco mais complexa, mas muito pouco. O que o torna pesado é que você precisa fazer muitos cálculos para cada solução, é aqui que o desempenho entra. Uma vez que a maioria dos cálculos não dependem uns dos outros, esses cálculos são excelentes candidatos para computação paralela. As GPUs são projetadas para esses tipos de cálculos e são projetadas para serem adicionadas facilmente aos sistemas de desktop.

Quando você precisa fazer cálculos matriciais em Python, a primeira solução que você encontra é numPy.  No entanto, NumPy nem sempre é o sistema mais eficiente para calcular muitas matrizes.
Esta postagem cobrirá quais opções você tem em Python.

Quando você precisar de alternativas, comece olhando com mais cuidado para o que você precisa de operações de matriz. Sua instalação atual pode já ter uma implementação própria ou está usando uma biblioteca subjacente. Um exemplo é o aprendizado de máquina, em que a necessidade de operações de matriz é fundamental. TensorFlow tem sua própria biblioteca para operações de matriz. Certifique-se de conhecer sua biblioteca atual.

Em muitos casos, porém, você precisa de uma solução que funcione para você. Talvez existam limitações no NumPy, algumas bibliotecas são mais rápidas que o NumPy e feitas especialmente para matrizes. Muitas vezes, os desenvolvedores desejam acelerar seu código para começar a procurar alternativas. Um dos motivos é que o NumPy não pode ser executado em GPUs.

Embora esta postagem seja sobre alternativas ao NumPy, uma biblioteca construída em cima do NumPy, a Biblioteca Theano precisa ser mencionada. A biblioteca Theano é totalmente integrada com NumPy e permite matriz com suporte de GPU. Theano é uma biblioteca maior para aprendizado de máquina, mas você pode usar apenas as funções de matriz.

Para uma explicação mais detalhada sobre o uso do Theano, consulte esta página: http: // www.marekrei.com / blog / theano-tutorial /

SpPy é uma biblioteca especificamente para matrizes esparsas, mas ainda pode ser usada para matrizes. Uma matriz esparsa, a propósito, é uma matriz que contém muitos valores zero. Esta biblioteca é pequena e eficiente, mas um pouco limitada devido à sua especialização. Ele também usa o NumPy, mas é mais eficiente do que apenas o NumPy.
https: // pythonhosted.org / sppy /

Eigen é uma implementação eficiente de matrizes, para usá-lo em Python você precisa do miniEigen, disponível em https: // pypi.org / pypi / minieigen. Eigen está realmente incluído em muitas outras soluções. Ele atua como uma biblioteca de matriz genérica para módulos e estruturas mais especializadas. Esta biblioteca tem muitos módulos para matriz densa e manipulação de array. Ele também suporta álgebra linear, decomposição e álgebra linear esparsa. O pacote também tem uma função de plugin para que você possa adicionar seus próprios módulos.
Para usar o Eigen, instale-o com pip e importe-o em seu código.

PyTorch é uma biblioteca para Aprendizado de Máquina, por isso possui operações matriciais. Importar a biblioteca inteira é um exagero se você quiser apenas fazer alguns cálculos. No entanto, se você está apenas começando com um projeto de aprendizado de máquina, certifique-se de decidir se este é para você.
Outra alternativa é buscar qualquer biblioteca C e usar essa. Para tornar isso possível, existe uma solução chamada cffi que criará a interface para você. Esta solução requer que você já conheça C e que crie um wrapper para cada função necessária. O código parecerá confuso e difícil de ler, mas pode valer a pena dependendo do seu projeto.

Se você quiser apenas acelerar todas as funções de array e numéricas você pode usar numba ao invés. Numba é um compilador Python. Ao usá-lo, o compilador criará código binário 'just in time', jit. A ideia de jit é mais comumente usada com Java, mas é muito útil para matemática pesada em Python. Como o Python é interpretado, você pode obter problemas de desempenho com matemática pesada, a numba cuida disso compilando para CPU ou GPU à sua escolha.
Também há recursos de computação paralela disponíveis; por padrão, o compilador é executado com um bloqueio que impede que muitos threads sejam executados ao mesmo tempo. Você pode desligar isso por um sinalizador, desde que esteja ciente dos problemas potenciais associados à programação paralela.

Conclusão

Muitas vezes, quando você começa a programar em Python, ou outras linguagens, você se depara com limitações da linguagem, do compilador ou de outra coisa. Quando você está nesta situação, você deve parar e pensar sobre quais limitações você tem e considerar quantas outras pessoas podem ter tido a mesma situação. No caso de Python e NumPy, muitos cientistas e desenvolvedores escreveram código que precisa de execução rápida. Este legado criou um grande número de ramos que podem resolver o seu problema sem forçá-lo a mudar de idioma ou escrever uma nova extensão para este idioma em particular.

Como mostrar a sobreposição de OSD em aplicativos e jogos Linux em tela cheia
Jogar jogos em tela cheia ou usar aplicativos em modo de tela cheia sem distração pode cortar você das informações relevantes do sistema visíveis em u...
Top 5 cartas de captura de jogos
Todos nós vimos e amamos streaming de jogos no YouTube. PewDiePie, Jakesepticye e Markiplier são apenas alguns dos melhores jogadores que ganharam mil...
Como desenvolver um jogo no Linux
Uma década atrás, poucos usuários de Linux preveriam que seu sistema operacional favorito um dia seria uma plataforma de jogos popular para videogames...