所以,我有一组以列表形式提取的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],
... ]
感谢您查看此内容
答案 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
解决方案。这种方式可能存在轻微的性能差异,但更重要的区别可能是哪种方式对您更有意义。