回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有以下<code>xy</code>numpy数组,它表示一些三角形顶点的位置:</p>
<pre><code>array([[[ 0.30539728, 49.82845203],
[ 0.67235022, 49.95042185],
[ 0.268982 , 49.95195348]],
[[ 0.268982 , 49.95195348],
[ 0.67235022, 49.95042185],
[ 0.27000135, 50.16334035]],
...
[[ 1.00647459, 50.25958169],
[ 0.79479121, 50.3010079 ],
[ 0.67235022, 49.95042185]],
[[ 0.79479121, 50.3010079 ],
[ 0.6886783 , 50.25867683],
[ 0.67235022, 49.95042185]]])
</code></pre>
<p>在这里,它是一个数组的形状<code>(10, 3, 2)</code>,但它也可以是<code>(5, 3, 2)</code>或<code>(18, 3, 2)</code>,你可以说。无论如何,它的形状是<code>(N, 3, 2)</code>。
我有另一个numpy数组<code>to_replace</code>的形状<code>(4, 2)</code>,但它也可以是<code>(6, 2)</code>或<code>(7, 2)</code>,但总是形状<code>(M, 2)</code>:</p>
<pre><code>array([[ 1.08267406, 49.88690993],
[ 1.1028248 , 50.01440407],
[ 0.74114309, 49.73183549],
[ 1.08267406, 49.88690993]])
</code></pre>
<p>它表示可以在我的第一个数组中找到的坐标对的位置。请注意,这些对中的每一对在<code>xy</code>中至少存在一次,但可能存在不止一次。
最后,我有一个第三个数组<code>replace_by</code>,其中的shape <code>(8,)</code>(或者基于上面的指示的shape <code>(M*2)</code>),它的值正好替换第一个<code>xy</code>数组中<code>to_replace</code>中包含的值。看起来是这样的:</p>
<pre><code>array([ 0.87751214, 49.91866589, 0.88758751, 49.98241296, 0.70674665, 49.84112867, 0.87751214, 49.91866589])
</code></pre>
<p>因此,基本上,{<cd1>}中的所有对<code>[1.08267406, 49.88690993]</code>都应该被<code>[0.87751214, 49.91866589]</code>代替</p>
<p>我当前的代码看起来是这样的,但它只有在<code>to_replace</code>和<code>replace_by</code>严格按形状<code>(2, 2)</code>时才起作用</p>
<pre><code>indices = (xy == to_replace[:, None][:, None])[0]
xy[indices] = replace_by
</code></pre>
<p>我在一个<a href="https://stackoverflow.com/questions/44752314/how-to-correctly-mask-3d-array-with-numpy">already</a>{a2}的<a href="https://stackoverflow.com/questions/40696158/how-to-mask-with-3d-array-and-2d-array-numpy">number</a>{a4}中的一个<a href="https://stackoverflow.com/questions/40696158/how-to-mask-with-3d-array-and-2d-array-numpy">number</a>中得到了一些灵感,但我仍然无法让它发挥作用</p>