我正在嘗試從四元數中找到旋轉矩陣。我正在使用 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).
uj5u.com熱心網友回復:
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和朋友只是組件的向量。也就是說,一維數字串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484222.html
標籤:Python 数组 麻木的 scipy numpy-ndarray
上一篇:轉置和比較
下一篇:生成方差為1/n的隨機IID數
