矩阵的numpy布尔索引

时间:2018-08-23 17:08:52

标签: python numpy

请放松一下我,因为我还是numpy的新手,并试图将我的头围绕着一些numpy的概念,我有这个问题:

问题

我有一个名为 @admin.register(User) class UserModelAdmin(UserAdmin, ExportMixin): ... fieldsets = ( ( _('Authentication'), { 'classes': ( 'collapse', ), 'fields': ( 'username', 'password', 'user_permissions', 'groups' ) } ), ( _('Status'), { 'fields': ( 'is_active', 'is_staff', 'is_superuser' ) } ), ... ) inlines = ( DeviceTabularInline, PaymentTabularInline ) class DeviceTabularInline(admin.TabularInline): model = Device classes = ('collapse',) ... class PaymentTabularInline(admin.TabularInline): model = Payment classes = ('collapse',) ... 的数字盒数组。
有2个框架,每个框架有200个框,每个框有4个坐标点。

我有一个名为{_1}}的布尔数组to_keep。对于每帧,都有200d数组来指示是否保留该框。

我想过滤掉boxes.shape = (2, 200, 4)并仅保留to_keep.shape = (2, 200)为真的那些。
我得到的形状应该是boxes

问题在于,对于第一帧,可能有25个框有效。但对于第二帧,可能有100盒有效。

如何有效地过滤掉numpy中的这种结构?

1 个答案:

答案 0 :(得分:-1)

一个数组和布尔掩码:

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数组。