张量流中的可微四元数实现。
tfquaternion的Python项目详细描述
#张量流四元数 张量流四元数的一种实现。完全可微的。
tfquaternion模块提供四元数作为
张量流图。
tfquaternion
提供基本四元数算法的模块函数
操作以及支持相关魔术的Quaternion
类
方法。这类似于tensorflow api,例如tfq.quaternion_multiply
对tf.multiply
和tfq.Quaternion
对tf.Tensor
。注意所有功能
从tf.quaternion_...
开始假设它的参数是tf.Tensor`s
(or `tfq.Quaternion`s) that can be casted to `tfq.Quaternion
,即形状
必须是(…,4)。
此实现主要与 [moble的四元数实现](https://github.com/moble/quaternion/) (通过使用稍微修改过的测试版本来保证)。但是,有 至少有两个主要区别:首先,tfquaternion按原样是类型特定的 张量流,即两个不同数据类型的四元数不能相乘。 其次,tfquaternion支持对四元数数组的操作。
###安装
你可以使用pypi
`
pip install tfquaternion
`
或者从git安装最新版本作为开发包:
`
git clone https://github.com/PhilJd/tf-quaternion.git
cd tf-quaternion
pip install -e .
`
-e选项只将工作副本链接到python站点包,
所以要升级,只需要运行git pull
。
###用法
在开始之前,关于部门的一个重要注意事项是:
这个图书馆类似于
[莫布尔四元数](https://github.com/moble/quaternion/)。而在
一般来说,除法运算符没有定义(从符号q1/q2可以
如果q1/q2=q1*q2^-1或q1/q2=q2^-1*q1,我们不会得出结论
实现,即tfq.quaternion_divide
和Quaternion.__truediv__
计算q1/q2 = q1 * 1/q2
。
####示例 四元数的简单旋转可以如下所示: ` >>> import tfquaternion as tfq >>> import tensorflow as tf >>> s = tf.Session() >>> points = tf.constant([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=tf.float32) >>> quat = tfq.Quaternion([0, 1, 0, 0]) rotate by 180 degrees around x axis >>> s.run(tf.matmul(quat.as_rotation_matrix(), points)) array([[ 1., 0., 0.], [ 0., -1.,0.], [ 0., 0., -1.]], dtype=float32) `
####API
#####类四元数
*
运算符的用法取决于乘数。如果乘数是
四元数,四元数乘法是在与
张量使用tf.multiply。除法的行为是相似的,除非
股息是标量,然后计算四元数的逆。
`
tfq.Quaternion([1, 0, 0, 0]) * tfq.Quaternion([0, 4, 0, 0])
>>> tfq.Quaternion([0, 4, 0, 0)
tfq.Quaternion([1, 0, 0, 0]) * tf.Tensor([0, 4, 0, 0])
>>> tf.Quaternion([0, 0, 0, 0)
`