可以用lambda来做以下事情吗?(我只是需要一些能够做到这一点真的很快)
因为这个答案而要求lambda:https://stackoverflow.com/a/35216364/3776738
import numpy as np
def one_to_more(i):
//do some calculations etc...
return [i*3,i*9]
x = np.array([1, 2, 3])
f = lambda x: one_to_more(x)
more = f(x)
print(more)
---〉[3,9,6,18,9,27]
编辑:一定不是LAMBDA。我只是在寻找以这种方式扩展大型列表或numpy数组的最快方法。这种方式意味着它将有两倍(上面的示例代码甚至更长的长度)
清洁:
这是实际使用的函数:
MAX_NUM=100000
def num_to_arr (num):
num = int(num)
if (num < 0 or num >= MAX_NUM):
num = 0
num3 = (num // 1600)
num2 = ((num - num3 * 1600) // 40)
num1 = int((num - num3 * 1600 - num2 * 40))
arr = [num1 / 40, num2 / 40, num3 / 40]
return arr
这样使用:
result=list(map(num_to_arr,large_array))
大数组由大约10 k个整数组成,执行时间大约为17 ms,这太高了。(CPU为AMD RYZEN 7950X)
2条答案
按热度按时间vkc1a9a21#
好的,谢谢你提供你的实际问题。我创建了你的函数的一个版本,它对整个数组起作用,并使用了一些向量化(尽管它没有完全向量化)。这提供了相当好的改进,虽然:
所以速度快了20倍。我怀疑要做得更好,您会希望使用
numba
here and write a very imperative loop编辑:
添加
numba
示例:这似乎使我们的速度提高了80倍。
8ftvxx2r2#
您可以使用广播和
ravel
:输出:
array([ 3, 9, 6, 18, 9, 27])