首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >bootstrap numpy 2D数组

bootstrap numpy 2D数组
EN

Stack Overflow用户
提问于 2019-05-23 04:22:12
回答 2查看 2.2K关注 0票数 3

我正在尝试用替换的方式逐行采样一个形状为(4,2)的base 2D numpy数组,比如10次。最终输出应该是一个3Dnumpy数组。

我已经尝试了下面的代码,它是有效的。但是有没有一种方法可以不使用for循环呢?

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 04:29:19

这里有一个矢量化的方法-

代码语言:javascript
复制
m,n = base.shape
idx = np.random.randint(0,m,(m,nsample))
out = base[idx].swapaxes(1,2)

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

票数 1
EN

Stack Overflow用户

发布于 2019-05-23 04:32:50

您可以使用numpy中的stack函数。然后,您的代码将如下所示:

代码语言:javascript
复制
base=np.array([[20,30],[50,60],[70,80],[10,30]])
print(np.shape(base))
nsample=10
tmp = []
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.append(boot1)
tmp = np.stack(tmp, axis=-1)
print(tmp)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56264456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档