python - 矩阵的numpy布尔索引
问题描述
请放轻松,因为我还是 numpy 的新手,并试图围绕一些 numpy 概念来思考,我有这个问题:
问题
我有一个名为 box 的 numpy 数组boxes.shape = (2, 200, 4)
。
有2个框,每个框有200个框,每个框有4个坐标点。
我有一个名为 to_keep 的布尔数组to_keep.shape = (2, 200)
。对于每一帧,有 200d 数组告诉是否保留该框。
我想过滤掉boxes
并只保留那些to_keep
真实的。
我得到的形状应该是filtered_boxes.shape = (2, N, 4)
问题是对于第一帧,25 个框可能是有效的。但是对于第二帧,100 个框可能是有效的。
如何在 numpy 中有效地过滤掉这个结构?
解决方案
一个数组和布尔掩码:
In [309]: X = np.arange(2*10*3).reshape(2,10,3)
In [314]: mask = np.random.randint(0,2,(2,10)).astype(bool)
In [315]: mask
Out[315]:
array([[False, False, True, True, False, True, True, True, True,
True],
[False, True, True, True, False, True, False, True, True,
False]])
迭代第一个维度:
In [316]: [x[i,:] for x,i in zip(X,mask)]
Out[316]:
[array([[ 6, 7, 8],
[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23],
[24, 25, 26],
[27, 28, 29]]),
array([[33, 34, 35],
[36, 37, 38],
[39, 40, 41],
[45, 46, 47],
[51, 52, 53],
[54, 55, 56]])]
通常,这样的掩码在每一行中具有不同数量的 True,因此无法将生成的掩码列表重新转换为 3d 数组。
推荐阅读
- php - Mysql 致命错误:未捕获的错误:在布尔值上调用成员函数 fetch()
- firebase - 在 Firefox 扩展中使用 Firebase 进行 Google Auth
- serverless-framework - 如何使用 serverless.io 框架和 serverless.yml 文件将整数作为变量传递给 aws-step-function 中的等待状态类型
- c# - DataGrid ListCollectionView 排序
- python - 基于属性的测试和浮点相等
- javascript - 是否有另一种方法可以在更改元素 html 时制作更好的动画?
- sharepoint-2010 - 上传的内容在 SharePoint 2010 主页上不可见
- dart - Flutter 执行二进制
- apache - Apache CXF 密码类型始终设置为摘要
- c++ - 在 extern "C" 块中定义一个继承另一个结构的结构是否可以?