我正在使用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]
但由于指数很大,所以洗牌很慢。
有关提高绩效的建议吗?
答案 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或更高版本。