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
和朋友只是组件的向量。即,一维数字列表。
我正在尝试从四元数中找到旋转矩阵。我正在使用 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
和朋友只是组件的向量。即,一维数字列表。