[英]Convert 1D strings array to a 2D float array
我正在嘗試將列表的數據類型轉換為浮點數。 我知道如何使用 for 循環轉換每個列表的數據類型,但是,我真的不知道如何轉換列表中每個項目的數據類型,即,我有一個數據類型為字符串的數組,使得
array(['5, 0, -150, 0', '6, 0, -10, 0',
'7, 2.5881904510252, 9.6592582628907, 0',
'8, 5, 8.6602540378444, 0',
'9, 7.0710678118655, 7.0710678118655, 0',
'10, 8.6602540378444, 5, 0'], dtype='<U63')
那么,如何將二維數組構建為浮點數據類型的 6x4 數組?
迭代該數組,在分隔符上拆分這些字符串,然后將它們設為浮點數據類型。
>>> arr2 = np.array([np.array([float(i.strip()) for i in j.split(',') if i]) for j in arr1])
>>> arr2
array([[ 5. , 0. , -150. , 0. ],
[ 6. , 0. , -10. , 0. ],
[ 7. , 2.58819045, 9.65925826, 0. ],
[ 8. , 5. , 8.66025404, 0. ],
[ 9. , 7.07106781, 7.07106781, 0. ],
[ 10. , 8.66025404, 5. , 0. ]])
>>> arr2.dtype
dtype('float64')
In [72]: arr = np.array(['5, 0, -150, 0', '6, 0, -10, 0',
...: '7, 2.5881904510252, 9.6592582628907, 0',
...: '8, 5, 8.6602540378444, 0',
...: '9, 7.0710678118655, 7.0710678118655, 0',
...: '10, 8.6602540378444, 5, 0'], dtype='<U63')
其他人提出的列表理解是正確的方法,但可以簡化:
In [73]: [line.split(',') for line in arr]
Out[73]:
[['5', ' 0', ' -150', ' 0'],
['6', ' 0', ' -10', ' 0'],
['7', ' 2.5881904510252', ' 9.6592582628907', ' 0'],
['8', ' 5', ' 8.6602540378444', ' 0'],
['9', ' 7.0710678118655', ' 7.0710678118655', ' 0'],
['10', ' 8.6602540378444', ' 5', ' 0']]
np.array
可以處理嵌套列表,並轉換為浮點數:
In [74]: np.array(_, dtype=float)
Out[74]:
array([[ 5. , 0. , -150. , 0. ],
[ 6. , 0. , -10. , 0. ],
[ 7. , 2.58819045, 9.65925826, 0. ],
[ 8. , 5. , 8.66025404, 0. ],
[ 9. , 7.07106781, 7.07106781, 0. ],
[ 10. , 8.66025404, 5. , 0. ]])
原始對象是數組而不是列表這一事實不會增強這種轉換。 事實上,在數組上迭代比在等效列表上迭代慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.