更快的numpy.random.shuffle有长度限制吗?

时间:2014-08-11 02:03:31

标签: 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]

但由于指数很大,所以洗牌很慢。

有关提高绩效的建议吗?

2 个答案:

答案 0 :(得分:1)

这是一个常见问题。我使用以下内容:

使用替换绘图

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是所需样本的数量。只要N <&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; LEN(数据)。

答案 1 :(得分:1)

使用replace=False尝试np.random.choice

示例(使用与问题中相同的变量):

data = np.random.choice(data_list, len_limit, replace=False)

你需要numpy版本1.7.0或更高版本。