将字符串转换为二维 numpy 数组

A B*_*A B 3 python arrays string numpy

我正在尝试将“b”(列条目由一个分隔符分隔且行由另一个分隔符分隔的字符串)转换为“a”(二维 numpy 数组),例如:

b='191.250\t0.00\t0\t1\n191.251\t0.00\t0\t1\n191.252\t0.00\t0\t1\n'
a=numpy.array([[191.25,0,0,1],[191.251,0,0,1],[191.252,0,0,1]])
Run Code Online (Sandbox Code Playgroud)

我这样做的方式是(根据我的知识,“a”中有 4 列):

a=numpy.array(filter(None,re.split('[\n\t]+',b)),dtype=float).reshape(-1,4)
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Ale*_*ley 5

您可以使用np.fromstring

>>> np.fromstring(b, sep='\t').reshape(-1, 4)
array([[ 191.25 ,    0.   ,    0.   ,    1.   ],
       [ 191.251,    0.   ,    0.   ,    1.   ],
       [ 191.252,    0.   ,    0.   ,    1.   ]])
Run Code Online (Sandbox Code Playgroud)

这总是返回一个一维数组,因此需要重新整形。

或者,为了避免重塑,如果您已经有一个字节字符串(如 Python 2 中的字符串),您可以使用np.genfromtxt(在标准库的 io 模块的帮助下):

>>> import io
>>> np.genfromtxt(io.BytesIO(b))
array([[ 191.25 ,    0.   ,    0.   ,    1.   ],
       [ 191.251,    0.   ,    0.   ,    1.   ],
       [ 191.252,    0.   ,    0.   ,    1.   ]])
Run Code Online (Sandbox Code Playgroud)

genfromtxt 处理缺失值,并提供对如何创建最终数组的更多控制。