[英]Convert List of List of Tuples Into 2d Numpy Array
我有一個元組列表:
X = [[(0.5, 0.5, 0.5), (1.0, 1.0, 1.0)], [(0.5, 0.5, 0.52), (1.0, 1.0, 1.0)], [(0.5, 0.52, 0.52), (1.0, 1.0, 1.0)], [(0.52, 0.52, 0.52), (1.0, 1.0, 1.0)], [(0.52, 0.52, 0.52), (1.0, 1.0, 1.0)]]
並希望將其轉換為 2D numpy 數組。 我嘗試了以下但沒有奏效。 我只是想確保新轉換的 2D 保持與 X 相同的形狀和結構。請幫助我,非常感謝。
import numpy as np
X = [[(0.5, 0.5, 0.5), (1.0, 1.0, 1.0)], [(0.5, 0.5, 0.52), (1.0, 1.0, 1.0)], [(0.5, 0.52, 0.52), (1.0, 1.0, 1.0)], [(0.52, 0.52, 0.52), (1.0, 1.0, 1.0)], [(0.52, 0.52, 0.52), (1.0, 1.0, 1.0)]]
np.asarray([sublist for sublist in X])
預期結果是:
[[ 0.5 , 0.5 , 0.5 ],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.5 , 0.52],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]]
不知道你是在 python 2.x 還是 3.x 上工作,但在 3.x 中你可以嘗試:
>> import numpy as np
>> X = [(....)] # Your list
>> array = np.array([*X])
>> print(array)
array([[[ 0.5 , 0.5 , 0.5 ],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.5 , 0.52],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]]])
不知道這是否是您想要實現的目標。
如果我對你的列表做正常的事情,我會得到一個 3d 數組:
In [38]: np.array(X)
Out[38]:
array([[[ 0.5 , 0.5 , 0.5 ],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.5 , 0.52],
[ 1. , 1. , 1. ]],
[[ 0.5 , 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]],
[[ 0.52, 0.52, 0.52],
[ 1. , 1. , 1. ]]])
In [39]: _.shape
Out[39]: (5, 2, 3)
print
(str) 顯示看起來很像您想要的結果 - 除了額外的 [] 集來包含整個內容:
In [40]: print(__)
[[[ 0.5 0.5 0.5 ]
[ 1. 1. 1. ]]
[[ 0.5 0.5 0.52]
[ 1. 1. 1. ]]
[[ 0.5 0.52 0.52]
[ 1. 1. 1. ]]
[[ 0.52 0.52 0.52]
[ 1. 1. 1. ]]
[[ 0.52 0.52 0.52]
[ 1. 1. 1. ]]]
我可以將其拆分為 5 個二維數組的列表,但顯示效果卻大不相同:
In [43]: np.split(np.array(X),5)
Out[43]:
[array([[[ 0.5, 0.5, 0.5],
[ 1. , 1. , 1. ]]]), array([[[ 0.5 , 0.5 , 0.52],
[ 1. , 1. , 1. ]]]), array([[[ 0.5 , 0.52, 0.52],
...]
將每個子列表轉換為數組的列表理解做同樣的事情, [np.array(x) for x in X]
我還可以將(5,2,3)
數組重塑為二維數組,例如 (10,3) 或 (5,6),但它們看起來不像您的目標。
tuple
層重要嗎(與列表相反)? 我可以使用結構化數組保留它(外觀明智): np.array(X, dtype=('f,f,f'))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.