给定两个不同大小的数组
这是我目前有的。它可以正常工作,但我想知道是否有更好的方法。
aa
和 bb
,我需要用 bb
中最接近的元素替换 aa
中的元素。这是我目前有的。它可以正常工作,但我想知道是否有更好的方法。
import numpy as np
# Some random data
aa = np.random.uniform(0., 1., 100)
bb = np.array([.1, .2, .4, .55, .97])
# For each element in aa, find the index of the nearest element in bb
idx = np.searchsorted(bb, aa)
# For indexes to the right of the rightmost bb element, associate to the last
# bb element.
msk = idx > len(bb) - 1
idx[msk] = len(bb) - 1
# Replace values in aa
aa = np.array([bb[_] for _ in idx])
[*]:实际上它 几乎 可以使用。正如评论中指出的那样,np.searchsorted 并不返回最接近元素的索引,而是返回 "已排序数组 a 的索引,使得如果在这些索引之前插入相应的 v 中的元素,则 a 的顺序将被保留",这并不相同。
searchsorted
无法找到最近的元素 - 您仍然需要检查两个候选项以确定哪一个更接近。 - user2357112