【发布时间】:2020-06-02 23:13:49
【问题描述】:
我有以下xy numpy 数组,它表示一些三角形顶点的位置:
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]]])
这里,它是一个(10, 3, 2) 形状的数组,但它也可以是(5, 3, 2) 或(18, 3, 2),随你的便。无论如何,它的形状是(N, 3, 2)。
我有另一个形状为(4, 2) 的numpy 数组to_replace,但它也可以是(6, 2) 或(7, 2),但总是形状为(M, 2):
array([[ 1.08267406, 49.88690993],
[ 1.1028248 , 50.01440407],
[ 0.74114309, 49.73183549],
[ 1.08267406, 49.88690993]])
它表示可以在我的第一个数组中找到的坐标对的位置。请注意,这些对中的每一个在xy 中至少出现一次,但可能不止一次出现。
最后,我有第三个数组replace_by,其形状为(8,)(或形状为(M*2),基于上面的指示),哪些值旨在完全替换我的第一个xy数组中to_replace中包含的值.它看起来像这样:
array([ 0.87751214, 49.91866589, 0.88758751, 49.98241296, 0.70674665, 49.84112867, 0.87751214, 49.91866589])
所以基本上xy 中的所有[1.08267406, 49.88690993] 对都应该替换为[0.87751214, 49.91866589]。
我当前的代码看起来像这样,但它只有在 to_replace 和 replace_by 严格符合 (2, 2) 的情况下才有效。
indices = (xy == to_replace[:, None][:, None])[0]
xy[indices] = replace_by
我在number 的answers 中already looked 并实际上受到了其中一些的启发,但我仍然无法让它发挥作用。
【问题讨论】:
标签: python python-3.x numpy numpy-ndarray array-broadcasting