首页 > 解决方案 > 引导 numpy 二维数组

问题描述

我正在尝试通过替换base形状为 (4,2) 的 2D numpy 数组进行采样,例如 10 次。最终输出应该是一个 3D numpy 数组。

已经尝试了下面的代码,它可以工作。但是有没有办法在没有 for 循环的情况下做到这一点?

base=np.array([[20,30],[50,60],[70,80],[10,30]])
print(np.shape(base))
nsample=10
tmp=np.zeros((np.shape(base)[0],np.shape(base)[1],10))
for i in range(nsample):
    id_pick = np.random.choice(np.shape(base)[0], size=(np.shape(base)[0]))
    print(id_pick)
    boot1=base[id_pick,:]
    tmp[:,:,i]=boot1
print(tmp)

标签: pythonnumpyvectorization

解决方案


这是一种矢量化方法 -

m,n = base.shape
idx = np.random.randint(0,m,(m,nsample))
out = base[idx].swapaxes(1,2)

基本思想是我们用np.random.randintas生成所有可能的索引idx。那将是一个 shape 数组(m,nsample)。我们使用这个数组沿第一个轴索引输入数组。因此,它选择随机行 off base。为了得到一个 shape 的最终输出(m,n,nsample),我们需要交换最后两个轴。


推荐阅读