Target: z里面存放的是60000个样本,每个样本都是10维的,要统计在对应维度上超出范围的个数 。 range_list里面存放的是每个维度的限定范围,size=(10,2)
- 传统方法,按照每个样本,每个维度查找
def cal_exp_portion(ran):
data = ran
exp_cord = []
cnt = 0
for i in tqdm(range(60000)):
for j in range(10):
if z[i][j] < data[j][0] or z[i][j] > data[j][1]:
cnt += 1
exp_cord.append(tuple([i,j]))
return cnt
cal_exp_protion(range_list)
花了一分半多
2. 快速方法
def fast_cal_portion():
cnt = 0
for i in range(10):
target = ((z[:,i] < range_list[i][0]) ^ (z[:,i] > range_list[i][1])).data.cpu().tolist().count(True)
test_num += target
print(test_num)
用了不到一秒钟
3.利用Python的特性,最简洁
def self_rect():
for i in range(10):
z[z[:,i]>range_list[i,1],i] = res[i,1]
z[z[:,i]<range_list[i,0],i] = res[i,0]