Utilisation de Quaternion avec Python ~ numpy-quaternion ~

introduction

Pyquaternion et numpy-quaternion semblent être les deux meilleures bibliothèques au monde qui gèrent les quaternions en Python, mais probablement parce que la personne qui a créé la page de référence pour pyquaternion était la première au Japon, le calcul du quaternion en Python déborde dans les rues. C'est juste pyquaternion (y en a-t-il seulement?).

Cependant, numpy-quaternion semble avoir un coût de calcul inférieur. Référence: https://www.theoj.org/joss-papers/joss.00787/10.21105.joss.00787.pdf

De plus, en comparant le nombre d'étoiles sur github, il y a plus de numpy-quaternion (au 13 décembre 2019, numpy-quaternion est de 276 et pyquaternion de 138).

Je pense que l'affinité avec numpy est également meilleure que pyquaternion en raison de la facilité de gestion de la conversion par lots. Souhaitez-vous l'utiliser?

Dépôt github: https://github.com/moble/quaternion Documentation: https://quaternion.readthedocs.io/en/latest/ PyPI: https://pypi.org/project/numpy-quaternion/

Installation

pip install numpy-quaternion

Vous pouvez facilement entrer avec.

Aussi,

import quaternion

Vous pouvez importer la bibliothèque avec.

Notation de quarternion

quat = (w, x, y, z) = \left(\underbrace{\cos\frac{\theta}{2}}_{Partie réelle},\ \underbrace{\lambda_x\sin\frac{\theta}{2},\ \lambda_y\sin\frac{\theta}{2},\ \lambda_z\sin\frac{\theta}{2}}_{Nombre imaginaire(vecteur)département}\right)

Comment utiliser

Moins que,

import numpy as np
import quaternion

ça ira.

Faire une quarternion

quat = np.quaternion(w, x, y, z)

quaternion est ajouté à l'attribut de numpy. Par exemple

print(np.quaternion(1,0,0,0))
# -> quaternion(1, 0, 0, 0)

type(np.quaternion(1,0,0,0))
# -> quaternion.quaternion

Il devient.

Synthèse de quaternion

q1 = np.quaternion(1, 2, 3, 4)
q2 = np.quaternion(4, 5, 6, 7)
print(q1*q2)
# -> quaternion(-52, 10, 24, 20)

La multiplication est définie. Pour le moment, d'autres opérations à quatre règles sont également définies, mais utilisez-vous parfois des sommes ... Ce n'est pas défini dans Eigen of C ++.

méthode de np.quaternion

Seule une partie sera reprise. Il ne couvre pas les choses liées aux fonctions sphériques ou à l'interpolation linéaire. Référence: https://quaternion.readthedocs.io/en/latest/_autosummary/quaternion.html

Variables de membre

Variables de membre une fonction
w Éléments de la partie réelle
x Le premier élément de la partie imaginaire
y Deuxième élément de la partie imaginaire
z Troisième élément de la partie imaginaire
components (w,x,y,z)Est numpy.Renvoyé en tant que tableau
imag Partie imaginaire(x,y,z)Est numpy.Renvoyé en tant que tableau
vec Partie imaginaire(x,y,z)Est numpy.Renvoyé en tant que tableau
real Partie réelle(w)Est retourné

Fonction membre

Fonction membre une fonction
abs() Valeur absolue du quaternion (distance euclidienne)
absolute() Valeur absolue du quaternion
angle() angle de rotation
conj() Renvoie le conjugué complexe du quaternion
conjugate() Renvoie le conjugué complexe du quaternion
equal(quat) Est-il égal au quaternion du contenu de l'argument?
exp Renvoie exponentiel (e^q
inverse() Renvoie le quaternion inverse
isfinite() Tous les éléments sont-ils finis
ininf() Y a-t-il même un élément inf?
innan() Y a-t-il même un élément nan?
log() Renvoie le journal des quarternions
nonzero() Tous les éléments sont-ils 0
norm() Norme Quarternion Cayley (route au carré absolu)
normalized() Renvoie un quaternion normalisé
notequal(quat) N'est-il pas égal au quaternion du contenu de l'argument?
sqrt() Place Quarternion-root(quat=q*qRencontrerq)rends le
square() Quarternion au carré(quat*quat)rends le

méthode quaternion

Le fait est que les méthodes dans ce domaine ne sont pas unidimensionnelles, mais peuvent également être utilisées pour des tableaux multidimensionnels. Si la taille de la dernière dimension nécessite un quaternion, elle doit être 4, si elle est de 3 dimensions, elle doit être de 3 dimensions, si elle est de 3x3, les 2 dernières dimensions doivent être de 3x3.

Fonction membre une fonction
quaternion.as_quat_array(a) numpy.Convertit un tableau en quaternion. La taille de la dernière dimension d'un doit être 4
quaternion.as_float_array(a) numpy.numpy quaternion.Convertir en tableau. La dimension de la sortie est une plus grande que celle de l'entrée.
quaternion.from_float_array(a) as_quat_Identique au tableau
quaternion.as_rotation_matrix(q) numpy.Convertissez quaternion en matrice de rotation 3x3.
quaternion.from_rotation_matrix(rot, nonorthogonal=True) Numpy une matrice de rotation 3x3.Convertir en quaternion
quaternion.as_rotation_vector(q) Trouvez l'axe de rotation à partir du quart. L'amplitude de la dernière dimension de la sortie est de 3.
quaternion.from_rotation_vector(rot) Conversion de l'axe de rotation de taille 3 en quaternion.
quaternion.as_euler_angles(q) Conversion de l'angle quaternion en angle huileur Reportez-vous au document pour l'ordre de conversion des angles d'Euler.
quaternion.from_euler_angles(alpha_beta_gamma, beta=None, gamma=None) Conversion de l'angle d'Euler en Quarternion. Reportez-vous au document pour l'ordre de conversion des angles de graisseur.
quaternion.rotate_vectors(R, v, axis=-1) R est un quaternion et v est un vecteur. Faites pivoter le vecteur en fonction du quaternion.
quaternion.allclose(a, b, rtol=8.881784197001252e-16, atol=0.0, equal_nan=False, verbose=False) Comparez deux quaternions
quaternion.integrate_angular_velocity(Omega, t0, t1, R0=None, tolerance=1e-12) Tourner selon la vitesse angulaire

Documentation officielle

https://quaternion.readthedocs.io/en/latest/index.html

À propos, l'auteur de cette bibliothèque semble avoir un grand angle de graissage. Si vous voyez quelqu'un l'utiliser, arrêtez! Dites-le et éloignez-vous de l'endroit et dérangez votre maman! Est écrit

finalement

Où est la demande de quaternions en Python? Unity est C #, et je parle d'utiliser les fonctions de Unity en premier lieu, et Python est trop lent pour les robots, ce qui est hors de question ...

Recommended Posts

Utilisation de Quaternion avec Python ~ numpy-quaternion ~
[S3] CRUD avec S3 utilisant Python [Python]
[Python] Utilisation d'OpenCV avec Python (basique)
Utiliser OpenCV avec Python @Mac
Envoyer en utilisant Python avec Gmail
Compléter python avec emacs en utilisant company-jedi
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Utilisation de Rstan de Python avec PypeR
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Notes sur l'utilisation de rstrip avec python.
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
[AWS] Utilisation de fichiers ini avec Lambda [Python]
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Essayez une formule utilisant Σ avec python
Grattage avec Python
Python avec Go
Utilisation de Python et MeCab avec Azure Databricks
Communication de socket en utilisant le serveur de socket avec python maintenant
Twilio avec Python
Intégrer avec Python
Commencez à utiliser Python
Essayez d'utiliser Python avec Google Cloud Functions
Jouez avec 2016-Python
AES256 avec python
Vérifiez les cours des actions avec Slackbot en utilisant Python
Travailler avec OpenStack à l'aide du SDK Python
Testé avec Python
python commence par ()
Conseils pour utiliser python + caffe avec TSUBAME
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
J'utilise tox et Python 3.3 avec Travis-CI
Scraping à l'aide de Python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Personal memo] julia --Utiliser la bibliothèque Python avec Julia en utilisant PyCall
Déboguer avec VS Code en utilisant Boost Python Numpy
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
Création récente de classement à l'aide de l'API Qiita avec Python
Qu'utilisez-vous lorsque vous testez avec Python?
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
Manipuler Redmine à l'aide de Python Redmine
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python