我试图找到一种最快的方法来生成一个随机索引数组。一个随机范围从0到一个数字,可以这么说。
目前,我比较了这两种方法:
setup = "import numpy as np; idxlen = 1000; rng = np.random.default_rng(); matrix = -np.ones([100,idxlen],dtype=int)"
test1 = "rand_idxs = np.arange(idxlen);
rng.shuffle(rand_idxs);
matrix[0][:] = rand_idxs"
test2 = "matrix[0][:] = rng.choice(range(idxlen),idxlen,replace=False)"
print(timeit.timeit(test1, setup, number = 10000))
print(timeit.timeit(test2, setup, number = 10000))
字符串
返回以下计时:
0.1846354000736028
0.950088300043717
型
我假设rng.shuffle()方法会随机化数组的索引,并根据这些索引重新排列它。现在,由于我正在生成一个包含从0到某个数字的所有整数的数组,这实际上相当于生成随机索引。所以我无法摆脱这样一种感觉,即有一种更快的方法可以实现我想要实现的目标。有吗?
1条答案
按热度按时间pftdvrlh1#
如果你从测试二中删除范围,那么你会看到变化,发现
test2
比第一个更快字符串
现在进行测试
对于idxlen=1000
型
对于idxlen=10000
型
对于idxlen=100000
型
还有一个方法是
np.random.Generator.permutation
这个方法的测试是
型
对于idxlen=1000
型
对于idxlen=10000
型
对于idxlen=100000
型
最后,比较所有三个之间的时间
number=10000
图形的数据
Code for graph