1

Pythonに2つのリストがあり、それらが同じインデックスで交差するかどうかを知りたいです。これを解決する数学的な方法はありますか?

たとえば、[9,8,7,6,5]と[3,4,5,6,7]がある場合、インデックス3でそれらが交差することを検出する単純で効率的な式/アルゴリズムが必要です。もっと良い方法があるかどうか疑問に思って検索を行うことができることを私は知っています。

y = mx + b形式の2つの線を互いに減算して解く式があることは知っていますが、私の「線」はリスト内の項目に限定されており、曲線がある可能性があるため、実際には線ではありません。

どんな助けでも大歓迎です。

4

4 に答える 4

4

両方のリストの座標の集合論的共通部分をとることができます。

intersecting_points = set(enumerate(list1)).intersection(set(enumerate(list2)))

... enumerateは、インデックスと値のタプルの反復可能を提供します。つまり、(0,9)、(1,8)、(2,7)などです。

http://docs.python.org/library/stdtypes.html#set-types-set-frozenset

...わかる?もちろん、それは本当に幾何学的な交差を与えるわけではありません-たとえば、[1,2]は[x = 0.5、y = 1.5]で[2,1]と交差します-それがあなたが望むなら、あなたは解決しなければなりません各間隔での一次方程式。

于 2010-05-30T17:07:50.943 に答える
1
from itertools import izip
def find_intersection(lineA, lineB):
  for pos, (A0, B0, A1, B1) in enumerate(izip(lineA, lineB, lineA[1:], lineB[1:])):
    #check integer intersections
    if A0 == B0: #check required if the intersection is at position 0
      return pos
    if A1 == B1: #check required if the intersection is at last position
      return pos + 1
    #check for intersection between points
    if (A0 > B0 and A1 < B1) or
       (A0 < B0 and A1 > B1):
      #intersection between pos and pos+1!
      return pos + solve_linear_equation(A0,A1,B0,B1)
  #no intersection
  return None

...solve_linear_equationセグメント(0,A0)→(1,A1)との交点を見つけ(0,B0)→(1,B1)ます。

于 2010-05-30T17:48:20.893 に答える
0

私はあなたのリストの1つの次元が仮定されていると仮定します例えば[9,8,7,6,5]はx1、x2、x3、x4、x5での高さですよね?その場合、リストはy = 0のような曲線をどのように表しますか?

いずれにせよ、一般曲線またはランダム曲線の交点を計算するための近道はないと思います。最善の解決策は、効率的な検索を行うことです。

于 2010-05-30T17:00:38.373 に答える
0
import itertools

def intersect_at_same_index(seq1, seq2):
    return (
        idx
        for idx, (item1, item2)
        in enumerate(itertools.izip(seq1, seq2))
        if item1 == item2).next()

これにより、2つのシーケンスのアイテムが等しいインデックスが返され、StopIterationすべてのアイテムのペアが異なる場合はaが発生します。この動作が気に入らない場合は、returnステートメントをtryステートメントで囲み、そのexcept StopIteration句でお気に入りの失敗インジケーターを返します(例:-1、None…)

于 2010-05-30T18:38:44.473 に答える