python - 引导 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)
解决方案
这是一种矢量化方法 -
m,n = base.shape
idx = np.random.randint(0,m,(m,nsample))
out = base[idx].swapaxes(1,2)
基本思想是我们用np.random.randint
as生成所有可能的索引idx
。那将是一个 shape 数组(m,nsample)
。我们使用这个数组沿第一个轴索引输入数组。因此,它选择随机行 off base
。为了得到一个 shape 的最终输出(m,n,nsample)
,我们需要交换最后两个轴。
推荐阅读
- c# - 如何处理 WPF 中的拖放?
- postgresql - 刷新物化视图产生错误:无法创建唯一索引
- docker - Hazelcast:无法加入集群。立即关闭
- ruby - rubocop 缩进多行赋值规则
- c++ - 异步操作的 Asio 处理程序不会被调用,而它们的同步对应物工作正常
- google-app-engine - 配置 Google App Engine 以提供 JS 客户端应用程序
- java - 迁移 androidX 后无法实例化片段 com.google.android.gms.maps.SupportMapFragment
- ios - Xcode Playground 使用简单的 UITableViewController 代码崩溃
- pytorch - 如何在 PyTorch 中使用 autograd.gradcheck?
- c# - 将 GitLab Web 应用部署到 Azure 应用服务