首页 > 解决方案 > Python 矩阵类型

问题描述

coordinate_1 = np.array([[(np.cos(0) * np.cos(alpha_radian),
                       np.cos(0) * np.sin(alpha_radian) * np.sin(
                           alpha_radian) - np.sin(0) * np.cos(alpha_radian),
                       np.cos(0) * np.sin(alpha_radian) * np.cos(alpha_radian))],
                     [np.sin(0) * np.cos(alpha_radian),
                      (np.sin(0) * np.sin(alpha_radian) * np.sin(
                          alpha_radian)) - (
                              np.cos(0) * np.cos(alpha_radian)),
                      (np.sin(0) * np.sin(alpha_radian) * np.cos(
                          alpha_radian)) - (
                              np.cos(0) * np.sin(alpha_radian))],
                     [-np.sin(alpha_radian),
                      np.cos(alpha_radian) * np.sin(alpha_radian),
                      np.cos(alpha_radian) * np.cos(alpha_radian)]])
print(coordinate_1)
print(type(coordinate_1))

并输出

[list([(0.7071067811865476, 0.4999999999999999, 0.5)])
list([0.0, -0.7071067811865476, -0.7071067811865475])
list([-0.7071067811865475, 0.5, 0.5000000000000001])]
<class 'numpy.ndarray'>

为什么矩阵输出总是在开始矩阵中包含一个“列表”,如何将它们转换为浮点数,我可以制作一个简单的矩阵相乘。

标签: pythonnumpymatrix

解决方案


我不确定为什么这些是列表,但我认为你更大的问题是你试图让 wat 看起来像一个 3d 旋转,对吗?

如果是这样,不要使用当前的实现,而是使用 scipy.spatial.transform.Rotation`。

里面的例子:

from scipy.spatial.transform import Rotation as R
r = R.from_euler('xyz', angles=[-45, 45, 0], degrees=True)
r.as_matrix()

这输出:

array([[ 7.07106781e-01, -5.00000000e-01,  5.00000000e-01],
       [-5.55111512e-17,  7.07106781e-01,  7.07106781e-01],
       [-7.07106781e-01, -5.00000000e-01,  5.00000000e-01]])

这与您的相似。只需根据您使用的 alpha_radians 来调整角度。

这比写那些令人头疼的行要好得多:)


推荐阅读