回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有两个numpy数组,由若干线段组成,格式为<code>[x1, y1, x2, y2]</code>:</p>
<pre class="lang-py prettyprint-override"><code>foo = np.array([
[2, 3, 2, 1],
[6, 3, 5, 4],
[5, 6, 8, 2],
[5, 2, 6, 5]
])
bar = np.array([
[4, 2, 7, 8],
[2, 1, 6, 9]
])
</code></pre>
<p>我的最终目标是检查来自<code>foo</code>的每个线段与来自<code>bar</code>的每个线段,并验证交点。不需要交点,我只想知道两段是否相交(真/假)</p>
<p>实际上,{<cd2>}中有几十亿行,{<cd3>}中有几百行,所以我想在跳到一个更复杂的方法之前,我会先执行一个更简单的检查来验证以下内容:</p>
<pre class="lang-py prettyprint-override"><code># two segments are potentially intersecting if and only if
xFmin <= xBmax && xBmin <= xFmax # x overlap
&&
yFmin <= yBmax && yBmin <= yFmax # y overlap
</code></pre>
<p>其思想是,如果两条线段不能同时满足此测试,则它们不可能相交。我正试图用numpy实现这个测试,但到目前为止运气不佳。我想到了几个问题:</p>
<ul>
<li>如何确定例如<code>yFmin</code>和<code>yFmax</code>(可通过预先排序坐标一次完成)</li>
<li>如何正确地分割和广播这两个数组以进行上述比较</li>
<li>是否有可能在一次操作中对所有段进行整个比较</李>
</ul>
<p>该测试应给出与以下类似的最终输出:</p>
<pre class="lang-py prettyprint-override"><code>result = np.array([
[True, False, False, True], # all segments in Foo against the first segment in Bar
[False, False, True, True] # all segments in Foo against the second segment in Bar
])
</code></pre>