所以,我在看 python,我有一个大的 2d numpy 数据数组,我想取这个大数据矩阵的 m 行。我研究了 random.sample、numpy.random.shuffle 和 numpy.random.permutation,所有这些都有效,但通常它们会返回整个排列或至少生成整个范围(n)。如果我有一个非常大的数据集,那么做类似的事情
data = numpy.random.uniform((n,100))
myvec = data[random.sample(range(n),m),:]
将分配一个快速爆炸的向量范围(n)。所以我想我可以使用 xrange,它返回一个生成器,但是嘿,你不能只从生成器中获取任何元素,这不是它们的工作方式。
我试过了,它有效。
data = numpy.random.uniform((n,100))
myvec = data[random.sample(xrange(n),m),:]
知道怎么做吗?
更新:
我可以用
samp = random.sample(range(n),10)
在出现内存错误之前,n 最多为 100000000。如果我使用
samp = random.sample(xrange(n),10)
另一方面,由于int转换为C,我才开始收到错误,即int太长而无法转换为C,大约为1000000000。当然它只是10倍,但我很好奇。xrange 变体也快得多。