[英]Split 2D NumPy array of strings on “,” character
我有一個 2D NumPy 字符串數組,例如: a = array([['1,2,3'], ['3,4,5']], dtype=object)
我想將它轉換為 2D像這樣的 Numpy 數組: a = array([['1','2','3'], ['4','5','6']])
。 然后,我還想將字符串轉換為浮點數,因此最終數組將如下所示: a = array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
。 任何幫助是極大的贊賞。
由於它是一個對象數組,我們不妨迭代並使用普通的python拆分:
In [118]: a = np.array([['1,2,3'], ['3,4,5']], dtype=object)
In [119]: a.shape
Out[119]: (2, 1)
In [120]: np.array([x.split(',') for x in a.ravel()])
Out[120]:
array([['1', '2', '3'],
['3', '4', '5']], dtype='<U1')
In [122]: np.array([x.split(',') for x in a.ravel()],dtype=float)
Out[122]:
array([[1., 2., 3.],
[3., 4., 5.]])
我用它來簡化迭代。 此外,結果不需要第二個尺寸 1 維。
有一個np.char
函數將split
應用於數組的元素,但結果更混亂:
In [129]: a.astype(str)
Out[129]:
array([['1,2,3'],
['3,4,5']], dtype='<U5')
In [130]: np.char.split(_, sep=',')
Out[130]:
array([[list(['1', '2', '3'])],
[list(['3', '4', '5'])]], dtype=object)
In [138]: np.stack(Out[130].ravel()).astype(float)
Out[138]:
array([[1., 2., 3.],
[3., 4., 5.]])
其它的辦法:
In [132]: f = np.frompyfunc(lambda astr: np.array(astr.split(','),float),1,1)
In [133]: f(a)
Out[133]:
array([[array([1., 2., 3.])],
[array([3., 4., 5.])]], dtype=object)
In [136]: np.stack(_.ravel())
Out[136]:
array([[1., 2., 3.],
[3., 4., 5.]])
遍歷行並使用split(',')
在逗號處拆分每一行,並將結果放入具有數字數據類型的新 numpy 數組中:
import numpy as np
a = np.array([['1,2,3'], ['3,4,5']])
b = np.array([x[0].split(',') for x in a], dtype=np.float32)
print(b)
#[[ 1. 2. 3.]
# [ 3. 4. 5.]]
如果您不介意將它們作為載體,我想提出這個建議
np.array([["asa,asd"], ["dasd,asdaf,asfasf"]], dtype=object)
Out[31]:
array([['asa,asd'],
['dasd,asdaf,asfasf']], dtype=object)
np.concatenate(np.char.split(Out[31].astype(str), ",").ravel())
Out[32]: array(['asa', 'asd', 'dasd', 'asdaf', 'asfasf'], dtype='<U6')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.