快速将 numpy.float64 列表转换为 Python 中的浮点数
Convert list of numpy.float64 to float in Python quickly
将 numpy.float64 类型的元素列表转换为 float 类型的最快方法是什么?我目前正在使用直接的 for loop
迭代和 float()
.
我遇到了这个 post:Converting numpy dtypes to native python types,但是我的问题不是如何在 python 中转换类型,而是更具体地说如何最好地转换整个列表在 python 中以最快的方式将一种类型转换为另一种类型(即在这种特定情况下 numpy.float64 浮动)。我希望有一些我没有遇到过的秘密 python 机器可以同时完成所有工作:)
您可以使用列表理解:
floats = [float(np_float) for np_float in np_float_list]
tolist()
方法应该可以满足您的需求。如果你有一个 numpy 数组,只需调用 tolist()
:
In [17]: a
Out[17]:
array([ 0. , 0.14285714, 0.28571429, 0.42857143, 0.57142857,
0.71428571, 0.85714286, 1. , 1.14285714, 1.28571429,
1.42857143, 1.57142857, 1.71428571, 1.85714286, 2. ])
In [18]: a.dtype
Out[18]: dtype('float64')
In [19]: b = a.tolist()
In [20]: b
Out[20]:
[0.0,
0.14285714285714285,
0.2857142857142857,
0.42857142857142855,
0.5714285714285714,
0.7142857142857142,
0.8571428571428571,
1.0,
1.1428571428571428,
1.2857142857142856,
1.4285714285714284,
1.5714285714285714,
1.7142857142857142,
1.857142857142857,
2.0]
In [21]: type(b)
Out[21]: list
In [22]: type(b[0])
Out[22]: float
如果你确实有 python 个 numpy.float64 对象列表,那么@Alexander 的答案很好,或者你可以将列表转换为数组,然后使用 tolist()
方法。例如
In [46]: c
Out[46]:
[0.0,
0.33333333333333331,
0.66666666666666663,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
In [47]: type(c)
Out[47]: list
In [48]: type(c[0])
Out[48]: numpy.float64
@Alexander的建议,一个列表理解:
In [49]: [float(v) for v in c]
Out[49]:
[0.0,
0.3333333333333333,
0.6666666666666666,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
或者,转换为数组,然后使用tolist()
方法。
In [50]: np.array(c).tolist()
Out[50]:
[0.0,
0.3333333333333333,
0.6666666666666666,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
如果您关心速度,这里有一个比较。输入 x
是一个 python numpy.float64 对象列表:
In [8]: type(x)
Out[8]: list
In [9]: len(x)
Out[9]: 1000
In [10]: type(x[0])
Out[10]: numpy.float64
列表理解时间:
In [11]: %timeit list1 = [float(v) for v in x]
10000 loops, best of 3: 109 µs per loop
转换为numpy数组然后tolist()
的时机:
In [12]: %timeit list2 = np.array(x).tolist()
10000 loops, best of 3: 70.5 µs per loop
因此将列表转换为数组然后调用tolist()
.
会更快
所以在我遇到的可能解决方案中(非常感谢 Warren Weckesser and Alexander for pointing out all of the best possible approaches) I ran my current method and that presented by Alexander 对运行时进行了简单比较(这两个选择是因为我有一个真实的清单numpy.float64 的元素并希望将它们快速转换为 float):
涵盖 2 种方法:列表理解和循环迭代的基础
首先是代码:
import datetime
import numpy
list1 = []
for i in range(0,1000):
list1.append(numpy.float64(i))
list2 = []
t_init = time.time()
for num in list1:
list2.append(float(num))
t_1 = time.time()
list2 = [float(np_float) for np_float in list1]
t_2 = time.time()
print("t1 run time: {}".format(t_1-t_init))
print("t2 run time: {}".format(t_2-t_1))
我运行四次给出一组快速的结果:
>>> run 1
t1 run time: 0.000179290771484375
t2 run time: 0.0001533031463623047
Python 3.4.0
>>> run 2
t1 run time: 0.00018739700317382812
t2 run time: 0.0001518726348876953
Python 3.4.0
>>> run 3
t1 run time: 0.00017976760864257812
t2 run time: 0.0001513957977294922
Python 3.4.0
>>> run 4
t1 run time: 0.0002455711364746094
t2 run time: 0.00015997886657714844
Python 3.4.0
显然要将 numpy.float64 的真实列表转换为浮点数,最佳方法是使用 python 的列表理解。
将 numpy.float64 类型的元素列表转换为 float 类型的最快方法是什么?我目前正在使用直接的 for loop
迭代和 float()
.
我遇到了这个 post:Converting numpy dtypes to native python types,但是我的问题不是如何在 python 中转换类型,而是更具体地说如何最好地转换整个列表在 python 中以最快的方式将一种类型转换为另一种类型(即在这种特定情况下 numpy.float64 浮动)。我希望有一些我没有遇到过的秘密 python 机器可以同时完成所有工作:)
您可以使用列表理解:
floats = [float(np_float) for np_float in np_float_list]
tolist()
方法应该可以满足您的需求。如果你有一个 numpy 数组,只需调用 tolist()
:
In [17]: a
Out[17]:
array([ 0. , 0.14285714, 0.28571429, 0.42857143, 0.57142857,
0.71428571, 0.85714286, 1. , 1.14285714, 1.28571429,
1.42857143, 1.57142857, 1.71428571, 1.85714286, 2. ])
In [18]: a.dtype
Out[18]: dtype('float64')
In [19]: b = a.tolist()
In [20]: b
Out[20]:
[0.0,
0.14285714285714285,
0.2857142857142857,
0.42857142857142855,
0.5714285714285714,
0.7142857142857142,
0.8571428571428571,
1.0,
1.1428571428571428,
1.2857142857142856,
1.4285714285714284,
1.5714285714285714,
1.7142857142857142,
1.857142857142857,
2.0]
In [21]: type(b)
Out[21]: list
In [22]: type(b[0])
Out[22]: float
如果你确实有 python 个 numpy.float64 对象列表,那么@Alexander 的答案很好,或者你可以将列表转换为数组,然后使用 tolist()
方法。例如
In [46]: c
Out[46]:
[0.0,
0.33333333333333331,
0.66666666666666663,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
In [47]: type(c)
Out[47]: list
In [48]: type(c[0])
Out[48]: numpy.float64
@Alexander的建议,一个列表理解:
In [49]: [float(v) for v in c]
Out[49]:
[0.0,
0.3333333333333333,
0.6666666666666666,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
或者,转换为数组,然后使用tolist()
方法。
In [50]: np.array(c).tolist()
Out[50]:
[0.0,
0.3333333333333333,
0.6666666666666666,
1.0,
1.3333333333333333,
1.6666666666666665,
2.0]
如果您关心速度,这里有一个比较。输入 x
是一个 python numpy.float64 对象列表:
In [8]: type(x)
Out[8]: list
In [9]: len(x)
Out[9]: 1000
In [10]: type(x[0])
Out[10]: numpy.float64
列表理解时间:
In [11]: %timeit list1 = [float(v) for v in x]
10000 loops, best of 3: 109 µs per loop
转换为numpy数组然后tolist()
的时机:
In [12]: %timeit list2 = np.array(x).tolist()
10000 loops, best of 3: 70.5 µs per loop
因此将列表转换为数组然后调用tolist()
.
所以在我遇到的可能解决方案中(非常感谢 Warren Weckesser and Alexander for pointing out all of the best possible approaches) I ran my current method and that presented by Alexander 对运行时进行了简单比较(这两个选择是因为我有一个真实的清单numpy.float64 的元素并希望将它们快速转换为 float):
涵盖 2 种方法:列表理解和循环迭代的基础
首先是代码:
import datetime
import numpy
list1 = []
for i in range(0,1000):
list1.append(numpy.float64(i))
list2 = []
t_init = time.time()
for num in list1:
list2.append(float(num))
t_1 = time.time()
list2 = [float(np_float) for np_float in list1]
t_2 = time.time()
print("t1 run time: {}".format(t_1-t_init))
print("t2 run time: {}".format(t_2-t_1))
我运行四次给出一组快速的结果:
>>> run 1
t1 run time: 0.000179290771484375
t2 run time: 0.0001533031463623047
Python 3.4.0
>>> run 2
t1 run time: 0.00018739700317382812
t2 run time: 0.0001518726348876953
Python 3.4.0
>>> run 3
t1 run time: 0.00017976760864257812
t2 run time: 0.0001513957977294922
Python 3.4.0
>>> run 4
t1 run time: 0.0002455711364746094
t2 run time: 0.00015997886657714844
Python 3.4.0
显然要将 numpy.float64 的真实列表转换为浮点数,最佳方法是使用 python 的列表理解。