python代码用于筛选数组中的元素。

此代码选自MDNet中,生成正样本。

samples_ = self._gen_samples(bbox, remain * factor)#产生remain*factor个正样本

                idx = np.ones(len(samples_), dtype=bool)#产生一个全为1的数组。len()返回第一维的元素的个数。
                if overlap_range is not None:
                    r = overlap_ratio(samples_, bbox)#计算样本和全部边界框的重叠率。
                    idx *= (r >= overlap_range[0]) * (r <= overlap_range[1])#判断重叠率是否在0.7-1之间,是的话,idx为1,不是的话,idx为0
                if scale_range is not None:
                    s = np.prod(samples_[:, 2:], axis=1) / np.prod(bbox[2:])
                    idx *= (s >= scale_range[0]) * (s <= scale_range[1])

                samples_ = samples_[idx, :]#当idx为false时,去除该样本。

samples_ = samples_[idx, :]感觉这行代码好神奇
1.如果a是一维数组,a[None,:],相当于扩展了数组的维度,此时数组变成了二维的。
示例代码:

a = np.array([1,2,3,4])
a = a[None,:]
print(a)

#数组a从一维变成了二维。
'''
[[1 2 3 4]]
'''

2.a是2维数组,b是以为布尔型数组,a = a[b,:],如果该b[x]为False,那么a中第x行就去掉了。
示例代码:

#测试b[a,:],其中a是一个布尔数组。
b = np.array([[1,2,3,4],
              [5,4,4,4],
              [8,4,5,6],
              [9,5,6,7]])
a = np.ones(len(b),dtype=bool)
a[2] = False
print("输出a:")
print(a)
b = b[a,:]
print("新的b的大小:")
print(b)

'''
输出a:
[ True  True False  True]
新的b的大小:
[[1 2 3 4]
 [5 4 4 4]
 [9 5 6 7]]
'''

3.想看一下能不能筛选一维数组中的元素

a = np.array([1,2,3,4,5,6])
r = np.array([0.6,0.7,0.8,0.9,0.1,0.2])
s = np.array([1.2,1.3,1.8,2.3,63,1.2])
idx = (r >= 0.6) * (r <= 1) * \
              (s >= 1) * (s <= 2)#这里不是很明白为什么s要大于等于1,小于等于2.
print(idx)
a = a[idx]
print(a)
'''
输出结果:
[ True  True  True False False False]
[1 2 3]
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值