【发布时间】:2013-10-29 10:06:17
【问题描述】:
我有两个长度为 10,000 的 numpy 数组 x 和 y。 我想绘制 x 和 y 的 1,000 个条目的随机子集。 有没有一种简单的方法可以在 x 和 y 上使用可爱、紧凑的 random.sample(population, k) 来选择相同的相应索引? (y 和 x 向量通过函数 y(x) 链接。)
谢谢。
【问题讨论】:
我有两个长度为 10,000 的 numpy 数组 x 和 y。 我想绘制 x 和 y 的 1,000 个条目的随机子集。 有没有一种简单的方法可以在 x 和 y 上使用可爱、紧凑的 random.sample(population, k) 来选择相同的相应索引? (y 和 x 向量通过函数 y(x) 链接。)
谢谢。
【问题讨论】:
只需将两者压缩在一起并将其用作人口:
import random
random.sample(zip(xs,ys), 1000)
结果将是来自 xs 和 ys 的 1000 对(2 元组)对应条目。
【讨论】:
您可以在索引数组上使用np.random.choice 并将其应用于两个数组:
idx = np.random.choice(np.arange(len(x)), 1000, replace=False)
x_sample = x[idx]
y_sample = y[idx]
【讨论】:
测试numpy.random.choice解决方案后,
我发现对于更大的数组来说它非常慢。
numpy.random.randint 应该更快
例子
x = np.arange(1e8)
y = np.arange(1e8)
idx = np.random.randint(0, x.shape[0], 10000)
return x[idx], y[idx]
【讨论】:
使用numpy.random.randint 函数,您可以生成一个随机数列表,这意味着您可以选择某些数据点两次。
【讨论】: