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)
有没有更好的办法?
您可以使用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 处理缺失值,并提供对如何创建最终数组的更多控制。