将字符串数组中的数字数组转换为python中的二维浮点数组

时间:2018-06-08 00:45:19

标签: python arrays

所以,我有一组以列表形式提取的xml提取数据。列表中包含六个值的数组。我想将该列表转换为二维浮点数组。例如,我想转换:

a = ['1 2 3 4 5 6', '6 5 4 3 2 1', ...]

为:

a = [[1 2 3 4 5 6],
     [6 5 4 3 2 1],
     ...          ] 

感谢您查看此内容

1 个答案:

答案 0 :(得分:1)

基本思路是split每个字符串,将拆分数转换为浮点数,并将它们收集起来。

如果您要求建立列表列表,这很简单:

a = [[float(number) for number in s.split()] for s in a]

如果你想构建一个2D numpy数组,最简单的方法是从列表列表构建它:

a = np.array([[float(number) for number in s.split()] for s in a])

如果您的列表很大,那么您无法负担构建该中间列表列表并且必须迭代执行,最好的方法通常是fromiter

rows = len(a)
cols = len(a[0].split())
it = (float(number) for s in a for number in s.split())
a = np.fromiter(it, dtype=float, count=rows*cols)
a = a.reshape(rows, cols)

如果你真的想要的话,你当然可以把它变成一个可怕的单行:

a = np.fromiter((float(number) for s in a for number in s.split()), dtype=float, count=len(a)*len(a[0].split())).reshape(len(a), len(a[0].split()))

另一种选择是循环并填充数组:

rows = len(a)
cols = len(a[0].split())
b = np.zeros((rows, cols), dtype=float)
for i, row in enumerate(a):
    b[i] = [float(number) for number in row.split()]
a = b

这基本上等同于fromiter解决方案。这种方式可能存在轻微的性能差异,但更重要的区别可能是哪种方式对您更有意义。