Funções Scipy Lapack

Funções Scipy Lapack
As bibliotecas Scipy e Numpy embutidas são incríveis para executar qualquer tipo de operações de álgebra linear em um programa Python. No entanto, se você não encontrar uma função ou método específico que atenda à sua necessidade de funções de álgebra linear, você sempre pode se referir às funções da lapack. As funções de lapack são usadas para resolver funções de álgebra linear complexas com facilidade e rapidamente. Neste guia, pretendemos explorar o maior número possível.

Qual é a função de lapack?

Lapack é uma biblioteca independente, de código aberto e gratuito usado especificamente para executar operações de álgebra linear. Significa pacote de álgebra linear e fornece cálculos de matriz robusta e rápida e álgebra linear numérica. Lapack fornece uma base para todos os tipos de funções de álgebra linear numéricas e computação matricial em Scipy, Numpy e Matlab. Lapack é basicamente construído em uma biblioteca fortran de grande porte de autoridade especificamente para álgebra linear numérica. O pacote lapack é capaz de gerenciar várias colunas de matriz simultaneamente e é muito rápido, pois foi intencionalmente feito para usar em supercomputadores.

A biblioteca scipy oferece uma ampla gama de funções de lapack de baixo nível no módulo Linalg. Essas funções não executam a verificação de erros e, se o fizerem, isso será muito pouco, o que levará à falha do sistema. A lista de centerões.Linalg.As funções de lapack são muito longas, pois contém várias funções úteis, eu.e., SGBSV, CGBSV, SGBTRS, ZGBTRS, SGECON, CGEEC, SGEEV, SGEHRD, DGEJSV, DGELSD, ZGELS, ZGELSY, ZGEQRF, DGESV, CGGEV, etc. Cada método tem funções diferentes e recursos diferentes. Existe apenas uma função de descoberta no Scipy.Linalg.módulo de lapack e essa é a função get_lapack_funcs. Vamos para a seção de exemplo para entender o funcionamento do Scipy.Linalg.funções de lapack.

Exemplo 1:

O círculo.Linalg.A função lapack tem apenas uma função de descoberta e é get_lapack_funcs. O get_lapack_funcs é usado para obter a função lapack disponível especificada pelo atributo de nome. A sintaxe do get_lapack_funcs é a seguinte:

O parâmetro 'nome' mantém o nome da função na forma de uma string ou sequência de strings sem qualquer tipo de prefixo. O parâmetro 'Array' mantém a sequência de matrizes multidimensionais que são usadas para determinar os prefixos ideais da rotina de lapack. O parâmetro 'dtype' define o tipo de dados e, finalmente, o parâmetro 'ILP' determina a variante de rotina ILP64. O nome dos três parâmetros, dtype e ILP são opcionais; portanto, se você não fornecer especificamente um valor para esses parâmetros, a função usará os valores padrão automaticamente. O get_lapack_funcs retornará a lista de funções encontradas em relação aos valores dos parâmetros fornecidos. Considere o código de exemplo fornecido abaixo para ter uma melhor compreensão:

importar numpy como np
Importar Scipy.Linalg como la
r = np.aleatório.default_rng ()
a = r.aleatório ((1, 2))
lab = la.get_lapack_funcs ('lange', (a+1j,))
Imprimir (laboratório.TypeCode)

A função começou com a importação da biblioteca Numpy como NP e Scipy.pacote linalg como la. Depois de importar todas as bibliotecas necessárias, chamamos a função aleatória () para executar a função default_rng (). O valor calculado é armazenado em uma variável 'r' e 'r' é então usada para chamar a função aleatória para gerar uma matriz de valores aleatórios que consistem em uma linha e duas colunas. Agora que temos todos os dados essenciais, podemos chamar a função get_lapack_funcs para obter a lista das funções.

Existem quatro tipos de prefixo contra cada função no círculo.Linalg.Lapack Library e eles são C, D, S e Z e cada um deles possui um complexo de tipo de dados64, float64, float32 e complexo128, respectivamente, respectivamente. Qualquer que seja o nome da função que você fornecer aos get_lapack_funcs, você obterá o tipo de prefixo C, D, S ou Z em troca. Aqui, mencionamos o nome da função 'Lange' e chamamos o método TypeCode. O nome do prefixo é armazenado no atributo TypeCode, então, quando você o chama, você receberá o nome do prefixo do nome da função fornecido. Vamos ver qual resultado obtemos da função get_lapcak_funcs:

Exemplo 2:

Suponha que precisamos usar a rotina 'Lange' para calcular a norma de matriz selecionada, mas não temos certeza sobre o prefixo da função. Nesse caso, podemos simplesmente passar nossa matriz para a função get_lapack_funcs e obter o sabor do prefixo correto para a matriz. Aqui, estamos apenas ajustando o exemplo anterior um pouco para mostrar os diferentes resultados da função get_lapcak_funcs para uma matriz diferente. Considere o código de referência abaixo:

importar numpy como np
Importar Scipy.Linalg como la
r = np.aleatório.default_rng ()
a = r.aleatório ((5, 5))
lab = la.get_lapack_funcs ('lange', (a,))
Imprimir (laboratório.TypeCode)

Como você pode notar, mudamos apenas os dados da matriz e a rotina prefixo para verificar como o resultado da função get_lapack_funcs muda. O resultado é apresentado abaixo no trecho:

Exemplo 3:

Como discutimos acima, a função de lapack de baixo nível faz pouca ou nenhuma verificação de erros, mas eles são muito rápidos e intencionalmente projetados para gerenciar uma grande quantidade de dados. Portanto, eles funcionam melhor para dados grandes o suficiente para computação rápida e pequeno o suficiente pode evitar o desperdício de memória. Agora, vamos testar os recursos de otimização do get_lapack_funcs, fornecendo uma matriz de tamanho de 1000 x 2000. Considere o código de referência fornecido no trecho de código abaixo:

importar numpy como np
Importar Scipy.Linalg como la
r = np.aleatório.default_rng ()
a = rng.Random ((1000, 2000))
xlwork = la.get_lapack_funcs ('sysv_lwork', (a,))
opt_lwork, _ = xlwork (a.forma [0])
Imprimir (opt_lwork)
Imprimir (XLWork.TypeCode)

Como você pode ver, fornecemos o tamanho de 1000 x 2000 da matriz a ser gerado. O nome da função 'sysv_lwork' foi dado e a matriz computada foi passada para a função get_lapack_funcs. Se o tamanho da matriz gerada é ideal ou não é determinado por uma consulta dedicada, conhecida como ### _ lWork. Como você pode ver, usamos o XLWork junto com a consulta SYSV_LWORK para obter o tamanho ideal da matriz computada. Também chamamos o TypeCode para conhecer o tipo de tipo ideal para a matriz gerada contra o nome da função sysv_lwork.

Conclusão

Este guia está enrolado na biblioteca lapack para funções de matriz complexas e sistemas de álgebra linear numéricos. Aprendemos sobre o funcionamento de funções de lapack de baixo nível com a ajuda de vários exemplos. Lapack significa o pacote de álgebra linear, que é usado por Numpy, Scipy e Matlab. É a base para as funções de álgebra linear oferecidas pelas bibliotecas Scipy e Numpy. Para entender melhor as funções de lapacão de baixo nível, pratique esses exemplos e tente modificá -los com base em diferentes cenários.