更快的numpy.random.shuffle有长度限制吗?
我正在使用更快的numpy.random.shuffle有长度限制吗?,numpy,shuffle,Numpy,Shuffle,我正在使用numpy.random.shuffle来洗牌数据列表。列表的长度很大,所以我想随机抽取一些数据来做我的工作 我使用以下代码实现此功能: # data_list is a numpy array of shape (num_data,) index = np.arange(data_list.size) np.random.shuffle(index) index = index[:len_limit] data = data_list[index] 但由于指数很大,洗牌的速度很慢
numpy.random.shuffle
来洗牌数据列表。列表的长度很大,所以我想随机抽取一些数据来做我的工作
我使用以下代码实现此功能:
# data_list is a numpy array of shape (num_data,)
index = np.arange(data_list.size)
np.random.shuffle(index)
index = index[:len_limit]
data = data_list[index]
但由于指数很大,洗牌的速度很慢
有什么改进性能的建议吗?这是一个常见问题。我使用以下方法: 替换图纸
idxs = np.random.randint(0, high=len(data), size=(N,))
result = data[idxs]
import random
idxs = random.sample(xrange(len(data)), N)
result = data[idxs]
无需更换的图纸
idxs = np.random.randint(0, high=len(data), size=(N,))
result = data[idxs]
import random
idxs = random.sample(xrange(len(data)), N)
result = data[idxs]
其中,data
是原始数据集,N
是所需样本数。只要使用replace=False尝试,这两种方法都应该比随机播放快
示例(使用与问题中相同的变量):
您需要numpy版本1.7.0或更高版本。很酷,很高兴他们最终将此添加到numpy中。这绝对是一个缺失的功能。清晰的答案。谢谢。虽然它方便多了,但我担心它与OP的代码完全一样,只是使用了np.random.permutation
而不是np.random.shuffle
,请看。@Jaime:既然你提到了它,我记得我看过那段代码了。我忘了是Python库(在random.sample
中)具有选择方法的启发式。还有一个关于性能的公开问题:谢谢。当您要保存索引时,此方法优于选择。