numpy 数组正在将 2D 数组转换为 3D 数组,这给了我一个错误

numpy array is converting a 2D array into 3D array which is giving me an error

我正在尝试从四元数中找到旋转矩阵。我正在使用 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).

Rotate.from_quat 期望得到一个四元数列表。你没有通过那个。您正在传递一个包含四个坐标列表的列表。它希望第一行有 [x,y,z,w],然后下一行有另一个 [x,y,z,w]。这意味着你需要转置你拥有的东西。

你必须做这样的事情,当然未经测试,因为我们有 none 你的数据:

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 和朋友只是组件的向量。即,一维数字列表。