scipy numpy数组将2D数组转换为3D数组时出错

jhkqcmku  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(176)

我试图从四元数中找到旋转矩阵。我使用了numpy和scipy中的预定义函数。我已经尝试了很长时间,甚至尝试改变数组的维数。最初我得到的是一个4D数组。类似于(3,4,17291,1)。我重新整形并减小了大小。即使在那之后,函数也是3D数组(4,17291,1)。

quat_w = dat[[" IMU2.quat_w"]]
quat_i = dat[[" IMU2.quat_i"]]
quat_j = dat[[" IMU2.quat_j"]]
quat_k = dat[[" IMU2.quat_k"]]
len_array = len(quat_w)
quat_temp = np.array([quat_w, quat_i, quat_j, quat_k])
quat = np.reshape(quat_temp, (4, len_array))
from scipy.spatial.transform import Rotation as R
rot = R.from_quat([quat_w, quat_i, quat_j, quat_k])

错误:

ValueError                                Traceback (most recent call last)
Input In [86], in <cell line: 2>()
      1 from scipy.spatial.transform import Rotation as R
----> 2 rot = R.from_quat([quat_w, quat_i, quat_j, quat_k])
    File rotation.pyx:626, in scipy.spatial.transform.rotation.Rotation.from_quat()
        File rotation.pyx:515, in scipy.spatial.transform.rotation.Rotation.__init__()
        ValueError: Expected `quat` to have shape (4,) or (N x 4), got (4, 17219, 1).
8cdiaqws

8cdiaqws1#

Rotate.from_quat期望得到一个四元数列表,但你没有传递它,而是传递了一个包含四个坐标列表的列表,它希望第一行有[x,y,z,w],下一行有另一个[x,y,z,w],这意味着你需要转置已有的列表。
你必须这样做,当然,未经测试,因为我们没有你的数据:

quat_w = dat[[" IMU2.quat_w"]]
quat_i = dat[[" IMU2.quat_i"]]
quat_j = dat[[" IMU2.quat_j"]]
quat_k = dat[[" IMU2.quat_k"]]
quat = np.array([quat_i, quat_j, quat_k, quat_w]).T
from scipy.spatial.transform import Rotation as R
rot = R.from_quat(quat)

我在这里假设quat_w和friends只是分量的向量,也就是一个一维的数字列表。

相关问题