假设我在Python中有两个列表:
现在,如果您能想象这些点代表2条线,a和b。 线a只是按线性上升(尽管这是任意的),而线b下降并首先在x = 4处接触a,然后在x = 6处越过a。
我想做的是,有一个简单且Pythonic的解决方案来检测何时出现线交叉或相交。我想知道是否已经有numpy或其他库可以做到这一点。
编辑: 我编写了这个装置,我认为它可以检测交叉情况。
a = [1, 2, 3, 4, 5, 6] # y values of a line
b = [7, 6, 4, 4, 8, 4] # x values are index location of the list
// result = [F, F, F, T, F, T]
现在,如果您能想象这些点代表2条线,a和b。 线a只是按线性上升(尽管这是任意的),而线b下降并首先在x = 4处接触a,然后在x = 6处越过a。
我想做的是,有一个简单且Pythonic的解决方案来检测何时出现线交叉或相交。我想知道是否已经有numpy或其他库可以做到这一点。
编辑: 我编写了这个装置,我认为它可以检测交叉情况。
aa <= bb; aa >= bb
也应该使其检测到触摸。# check if lines crossed in past X bars
def cross(a, b, bars=3):
aa = np.array(a[-bars:])
bb = np.array(b[-bars:])
if len(np.unique(aa < bb)) == len(np.unique(aa > bb)) == 1:
return False
return True
(if len(np.unique(aa < bb)) == len(np.unique(aa > bb)) == 1:)
替换为(a>b).any() and (b>a).any()
,后者更快。 - B. M.