簡體   English   中英

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]。 這意味着你需要轉置你擁有的東西。

你必須做這樣的事情,當然未經測試,因為我們沒有你的數據:

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和朋友只是組件的向量。 也就是說,一維數字列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM