Python numpy.random.choice的性能

Python numpy.random.choice的性能,python,performance,numpy,Python,Performance,Numpy,我更新了代码和计时。 我试图在代码中提高函数的性能。我必须生成一个包含随机元素的列表。但是,列表的不同部分必须用取自不同集合的元素填充。下面是一个代码示例。我必须生成数百万个这样的列表,一次一个 函数foo1是最快的,但它不能满足我的需要。它是用于性能参考的。函数foo2和foo3执行我需要的操作,但花费的处理时间几乎是foo1的三倍 Python 2.7.9(默认值,2015年2月10日,03:29:19)。达尔文的[GCC 4.2.1兼容苹果LLVM 6.0(clang-600.0.56)]

我更新了代码和计时。

我试图在代码中提高函数的性能。我必须生成一个包含随机元素的列表。但是,列表的不同部分必须用取自不同集合的元素填充。下面是一个代码示例。我必须生成数百万个这样的列表,一次一个

函数foo1是最快的,但它不能满足我的需要。它是用于性能参考的。函数foo2和foo3执行我需要的操作,但花费的处理时间几乎是foo1的三倍

Python 2.7.9(默认值,2015年2月10日,03:29:19)。达尔文的[GCC 4.2.1兼容苹果LLVM 6.0(clang-600.0.56)]。numpy.版本 “1.8.1”

我的机器上的运行时间为:

timeit.timeit(foo1,setup=setup,number=10000000) 235.22050380706787

timeit.timeit(foo2,setup=setup,number=10000000) 760.1884841918945

timeit.timeit(foo3,setup=setup,number=10000000) 560.77258586883545

timeit.timeit(foo4,setup=setup,number=10000000) 388.69550228118896

timeit.timeit(foo5,setup=setup,number=10000000) 252.32089233398438

现在我接受Divakar提出的第二个建议,这很好。但欢迎提出其他建议

将其可选参数
replace
设置为
True
返回从输入数组中随机选择的元素,这些元素可以重复。我们可以通过创建覆盖数组长度的随机索引并将索引编入数组以进行选择来模拟这种行为。因此,我们可以用这样的东西来模拟内置的-

def random_choice_replace_True(A,size):
    return np.array(A)[np.random.randint(0,len(A),size)]

如果您处理的输入已经是NumPy数组,您可以跳过
np.array(A)
部分进行转换,只需在那里使用
A

那么您的代码比1s快,您需要提高性能吗?运行时如此之低,运行时将根据您的系统当前正在执行的操作(后台进程)而变化很大。我甚至不知道你的问题是不是一个问题。如果你分享实际问题(如何生成数百万个列表),优化可能会更容易。根据需要,我更新了代码和计时。亲爱的Divakar。谢谢你的建议。它大大提高了性能。如果能进一步改进,那就太好了。@user1348438我已经用简单的索引替换了
numpy.take
,根据我刚刚运行的一些测试,这似乎减少了更多的运行时间。看看那些!此外,我认为我无法进一步优化它:)亲爱的迪瓦卡。谢谢你的建议。现在好多了!顺致敬意,
def random_choice_replace_True(A,size):
    return np.array(A)[np.random.randint(0,len(A),size)]