Fonctions de Lapack Scipy

Fonctions de Lapack Scipy
Les bibliothèques Scipy et Numpy intégrées sont incroyables pour effectuer tout type d'opérations d'algèbre linéaire dans un programme Python. Cependant, si vous ne trouvez pas de fonction ou de méthode spécifique qui répond à votre besoin de fonctions d'algèbre linéaire, vous pouvez toujours vous référer aux fonctions Lapack. Les fonctions lapack sont utilisées pour résoudre les fonctions d'algèbre linéaire complexes avec facilité et rapidement. Dans ce guide, nous visons à explorer autant de fonctions de lapack que possible pour vous aider à comprendre comment vous pouvez faciliter votre travail avec des fonctions d'algèbre linéaire.

Quelle est la fonction lapack?

Lapack est une bibliothèque indépendante, open source et gratuite utilisée spécifiquement pour effectuer des opérations d'algèbre linéaire. Il signifie un ensemble d'algèbre linéaire et fournit des calculs à matrice robuste et rapide et une algèbre linéaire numérique. Lapack fournit une base pour toutes sortes de fonctions d'algèbre linéaire numérique et de calcul matriciel dans Scipy, Numpy et Matlab. Lapack est essentiellement construit sur une grande bibliothèque Fortran multi-écrivative spécifiquement pour l'algèbre linéaire numérique. Le package LAPACK est capable de gérer simultanément plusieurs colonnes matricielles et il est très rapide car il a été intentionnellement fait d'utiliser dans les supercalculateurs.

La bibliothèque Scipy propose une large gamme de fonctions de lapack de bas niveau dans le module Linalg. Ces fonctions n'effectuent pas la vérification des erreurs et si elles le font, ce sera très peu, ce qui conduit au crash du système. La liste de Scipy.linalg.Les fonctions de lapack sont très longues car elle contient plusieurs fonctions utiles, i.e., SGBSV, CGBSV, SGBTRS, ZGBTRS, SGECON, CGEEG, SGEEV, SGEHRD, DGEJSV, DGELSD, ZGELSS, ZGELSY, ZGEQRF, DGEV, CGGEV, ETC. Chaque méthode a des fonctions différentes et a des fonctionnalités différentes. Il n'y a qu'une seule fonction de recherche dans le scipy.linalg.module lapack et c'est la fonction get_lapack_funcs. Passons à l'exemple de la section pour comprendre le fonctionnement de Scipy.linalg.Fonctions de Lapack.

Exemple 1:

Le scipy.linalg.La fonction lapack n'a qu'une seule fonction de recherche et c'est get_lapack_funcs. Le get_lapack_funcs est utilisé pour obtenir la fonction LAPack disponible spécifiée par l'attribut de nom. La syntaxe du get_lapack_funcs est la suivante:

Le paramètre «Nom» détient le nom de la fonction sous la forme d'une chaîne ou d'une séquence de chaînes sans aucun type de préfixe. Le paramètre «tableau» contient la séquence des tableaux multidimensionnels qui sont utilisés pour déterminer les préfixes optimaux de la routine lapack. Le paramètre «dtype» définit le type de données et enfin, le paramètre «Ilp» détermine la variante de routine ILP64. Les trois paramètres Nom, DType et ILP sont facultatifs, donc si vous ne fournissez pas spécifiquement une valeur pour ces paramètres, la fonction utilisera automatiquement les valeurs par défaut. Le get_lapack_funcs renverra la liste des fonctions trouvées par rapport aux valeurs des paramètres fournies. Considérez l'exemple de code ci-dessous pour mieux comprendre:

Importer Numpy comme NP
importer scipy.Linalg comme LA
r = np.aléatoire.default_rng ()
a = r.aléatoire ((1, 2))
laboratoire = la.get_lapack_funcs ('lange', (a + 1j,))
imprimer (laboratoire.Typecode)

La fonction a commencé par l'importation de la bibliothèque Numpy en tant que NP et SCIPY.Package Linalg comme LA. Après avoir importé toutes les bibliothèques requises, nous avons appelé la fonction aléatoire () pour exécuter la fonction default_rng (). La valeur calculée est stockée dans une variable «r» et «r» est ensuite utilisée pour appeler la fonction aléatoire pour générer un tableau de valeurs aléatoires composées d'une ligne et de deux colonnes. Maintenant que nous avons toutes les données essentielles, nous pouvons appeler la fonction get_lapack_funcs pour obtenir la liste des fonctions.

Il existe quatre types de préfixes contre chaque fonction du scipy.linalg.La bibliothèque de Lapack et ils sont C, D, S et Z et chacun a un type de données Complex64, Float64, Float32 et Complex128 respectivement. Quel que soit le nom de la fonction que vous fournissez au type de préfixe Get_lapack_Funcs, vous obtiendrez le type de préfixe C, D, S ou Z. Ici, nous avons mentionné le nom de la fonction «Lange» et appelé la méthode Typecode. Le nom du préfixe est stocké dans l'attribut Typecode, donc lorsque vous l'appelez, vous obtiendrez le nom du préfixe du nom de la fonction fourni. Voyons quel résultat nous obtenons de la fonction get_lapcak_funcs:

Exemple 2:

Supposons que nous devons utiliser la routine «Lange» pour calculer la norme de tableau sélectionnée, mais nous ne sommes pas sûrs du préfixe de la fonction. D'ailleurs, nous pouvons simplement passer notre tableau à la fonction get_lapack_funcs et obtenir la bonne saveur de préfixe pour le tableau. Ici, nous modifions un peu l'exemple précédent pour vous montrer les différents résultats de la fonction get_lapcak_funcs pour un tableau différent. Considérez le code de référence ci-dessous:

Importer Numpy comme NP
importer scipy.Linalg comme LA
r = np.aléatoire.default_rng ()
a = r.aléatoire ((5, 5))
laboratoire = la.get_lapack_funcs ('lange', (a,))
imprimer (laboratoire.Typecode)

Comme vous pouvez le remarquer, nous n'avons modifié les données du tableau et la routine de préfixe pour vérifier comment le résultat de la fonction get_lapack_funcs change. Le résultat est donné ci-dessous dans l'extrait:

Exemple 3:

Comme nous l'avons discuté ci-dessus, la fonction LAPack à bas niveau fait peu ou pas de vérification d'erreur, mais elles sont très rapides et intentionnellement conçues pour gérer une grande quantité de données. Par conséquent, ils fonctionnent mieux pour les données suffisamment grandes pour un calcul rapide et suffisamment petit peut éviter le gaspillage de la mémoire. Maintenant, testons les capacités d'optimisation du get_lapack_funcs en lui fournissant un tableau de taille de 1000 x 2000. Considérez le code de référence donné dans l'extrait de code ci-dessous:

Importer Numpy comme NP
importer scipy.Linalg comme LA
r = np.aléatoire.default_rng ()
a = rng.aléatoire ((1000, 2000))
xlwork = la.get_lapack_funcs ('sysv_lwork', (a,))
opt_lwork, _ = xlwork (a.forme [0])
print (opt_lwork)
imprimer (xlwork.Typecode)

Comme vous pouvez le voir, nous avons fourni la taille 1000 x 2000 du tableau à générer. Le nom de la fonction 'sysv_lwork' a été donné et le tableau calculé a été transmis à la fonction get_lapack_funcs. La question de savoir si la taille du tableau généré est optimale ou non est déterminée par une requête dédiée qui est connue sous le nom de ### _ lwork. Comme vous pouvez le voir, nous avons utilisé XLWork avec la requête SYSV_LWORD pour obtenir la taille optimale du tableau calculé. Nous avons également appelé le code typode pour connaître le code typique optimal pour le tableau généré contre le nom de la fonction sysv_lwork.

Conclusion

Ce guide est enroulé autour de la bibliothèque LAPACK pour des fonctions de matrice complexes et des systèmes d'algèbre linéaire numérique. Nous avons appris le fonctionnement des fonctions de lapack de bas niveau à l'aide de plusieurs exemples. Lapack représente un ensemble d'algèbre linéaire, qui est utilisé par Numpy, Scipy et Matlab. C'est la base des fonctions d'algèbre linéaire offertes par les bibliothèques Scipy et Numpy. Pour mieux comprendre les fonctions de lapack de bas niveau, pratiquez ces exemples et essayez de les modifier en fonction de différents scénarios.