屏蔽不同大小的数组,然后替换另一个元素

Mask array of different sizes, then replace elements from another one

我有两个不同大小的数组 ab,我想获得一个与最大数组 (a_and_b) 大小相同的新数组,并使用到处都有 zeros 的元素,除非两个元素中的任何一个之间的差异最小。然后我想用另一个与第一个大小相同的数组的元素替换它的非零元素

a = np.asarray([1, 3])
b = np.asarray([0.8, 0.95, 1.1, 1.25, 1.40, 1.55, 1.70, 1.85, 2.00, 2.15, 2.30, 2.45, 2.60, 2.75, 2.90, 3.05])
c = np.asarray([15.145, 18.191])

a_and_b = [0 0.95 0 0 0 0 0 0 0 0 0 0 0 0 0 3.05]
final = [0 15.145 0 0 0 0 0 0 0 0 0 0 0 0 0 18.191]

如何获得final

试试这个。

import numpy as np

a = np.asarray([1, 3])
b = np.asarray([0.8, 0.95, 1.1, 1.25, 1.40, 1.55, 1.70, 1.85, 2.00, 2.15, 2.30, 2.45, 2.60, 2.75, 2.90, 3.05])
c = np.asarray([15.145, 18.191])

a_and_b, final = np.zeros_like(b), np.zeros_like(b)
min_ba = (abs(b.reshape(1,-1)-a.reshape(-1,1)).argmin(axis=1))
a_and_b[min_ba] = b[min_ba]
final[min_ba] = c
print(a_and_b)
print(final)

输出:

[0.   0.95 0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
 0.   3.05]
[ 0.    15.145  0.     0.     0.     0.     0.     0.     0.     0.
  0.     0.     0.     0.     0.    18.191]