gpt4 book ai didi

python - 以更快的方式转换 numpy 数组中的字符串列表

转载 作者:太空狗 更新时间:2023-10-29 21:44:25 24 4
gpt4 key购买 nike

br 是字符串列表的名称,如下所示:

['14 0.000000 -- (long term 0.000000)\n',
'19 0.000000 -- (long term 0.000000)\n',
'22 0.000000 -- (long term 0.000000)\n',
...

我对前两列感兴趣,我想将其转换为 numpy 数组。到目前为止,我提出了以下解决方案:

x = N.array ([0., 0.])
for i in br:
x = N.vstack ( (x, N.array (map (float, i.split ()[:2]))) )

这会产生一个二维数组:

array([[  0.,   0.],
[ 14., 0.],
[ 19., 0.],
[ 22., 0.],
...

但是,由于 br 相当大(~10^5 个条目),这个过程需要一些时间。我想知道,是否有一种方法可以在更短的时间内完成相同的结果?

最佳答案

这对我来说要快得多:

import numpy as N

br = ['14 0.000000 -- (long term 0.000000)\n']*50000
aa = N.zeros((len(br), 2))

for i,line in enumerate(br):
al, strs = aa[i], line.split(None, 2)[:2]
al[0], al[1] = float(strs[0]), float(strs[1])

变化:

  • 预分配 numpy 数组(这很大)。您已经知道您需要一个具有特定维度的二维数组。
  • 只对前 2 列使用 split(),因为您不需要其余的。
  • 不要使用 map():它比列表解析慢。我什至没有使用列表理解,因为你知道你只有 2 列。
  • 直接分配到预先分配的数组中,而不是在迭代时生成新的临时数组。

关于python - 以更快的方式转换 numpy 数组中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com