给定1D
array
a=np.array([ 65, 251, 431])
还有一个1D
大堆
用于构建边界。
b=np.array([ 4, 10, 18, 22, 28, 33, 40, 49, 72, 83, 90, 93, 99,
107, 113, 119, 130, 142, 161, 167, 173, 178, 183, 196, 202, 209,
215, 221, 228, 233, 240, 258, 262, 269, 274, 281, 286, 297, 311,
317, 352, 354, 358, 365, 371, 376, 382, 389, 396, 413, 420, 441,
443, 450, 459, 467, 473, 477, 483, 491, 495, 497])
例如,两点边界可以是坐标边界
4,10
,
4,18
,
4,497
,...,
495,497
.
目标是找到一个整数(例如数组a中的每个整数)可以驻留的最接近的边值对。
比如价值
65
,它可以驻留的最近边界是
49,72
.
下面的代码应该符合这个目标
import numpy as np
import pandas as pd
a=np.array([ 65, 251, 431])
# Assumed `b` is sorted from lowest to highest value and no duplicate values
b=np.array([ 4, 10, 18, 22, 28, 33, 40, 49, 72, 83, 90, 93, 99,
107, 113, 119, 130, 142, 161, 167, 173, 178, 183, 196, 202, 209,
215, 221, 228, 233, 240, 258, 262, 269, 274, 281, 286, 297, 311,
317, 352, 354, 358, 365, 371, 376, 382, 389, 396, 413, 420, 441,
443, 450, 459, 467, 473, 477, 483, 491, 495, 497])
leadB =b[:-1]
trailB=b[1:]
all_val=[]
for dis_a in a:
for l,t in zip(leadB,trailB):
if l < dis_a <= t:
all_val.append({'a':dis_a,'lb':l,'tb':t})
# The final output can be in the form of pandas or numpy array
df=pd.DataFrame(all_val)
但是,上述方法在很大程度上依赖于两个阶段
for-loop
.我想知道是否有有效的方法可以通过内置的
Numpy
或
Pandas
.