import numpy as np
In [30]: a = np.asarray([complex(1, 1), complex(-1, 2), complex(3, -6)])
In [31]: np.abs(a)
Out[31]: array([ 1.41421356, 2.23606798, 6.70820393])
性能比较:
对于 1000 个元素:
In [17]: a = np.random.randint(-10, 10, 1000) + 1j * np.random.randint(-10, 10, 1000)
In [18]: lst = a.tolist()
In [19]: a.shape
Out[19]: (1000,)
In [20]: len(lst)
Out[20]: 1000
In [21]: %timeit [abs(c) for c in lst]
1000 loops, best of 3: 244 µs per loop
In [22]: %timeit np.abs(a)
10000 loops, best of 3: 28 µs per loop
对于 1.000.000 个元素:
In [23]: a = np.random.randint(-10, 10, 10**6) + 1j * np.random.randint(-10, 10, 10**6)
In [24]: lst = a.tolist()
In [25]: a.shape
Out[25]: (1000000,)
In [26]: len(lst)
Out[26]: 1000000
In [27]: %timeit [abs(c) for c in lst]
1 loop, best of 3: 402 ms per loop
In [28]: %timeit np.abs(a)
10 loops, best of 3: 24 ms per loop
使用 NumPy 模块的解决方案:
性能比较:
对于 1000 个元素:
对于 1.000.000 个元素:
您需要的是列表理解。
它是这样工作的:
这里第二行完全等同于一个循环:
在现代 python 中,对于类似的任务,强烈建议使用列表理解,而不是评论中建议的地图。
对于
numpy数组:对于 Python 列表:
请参阅*(星号)和 ** 双星号在 Python 中的含义是什么?