浮点数组与int numpy数组的比较

m3eecexj  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(147)

我有两个numpy数组:其中一个是使用正弦函数获得的(因此,它具有浮点值),而另一个数组由整数组成。这样的数组的一个例子是:

x = np.array([0.43, 2.11, 3.67, 4.12, 7.05, 8.87, 9.1, 11, 11.67])
y = np.array([1, 3, 5, 9, 10])

这两个数组比这个玩具示例大得多。但是x大于y,并且包含y的元素。问题是,你必须天真地检查x中y中的给定元素两次:一次向上舍入,另一次向下舍入。所以一个简单的np.round()是不够的。

np.floor(x)
# array([0., 3., 4., 8., 9.])

np.ceil(x)
# array([ 1.,  4.,  5.,  9., 10.])

例如,对于floor(x),0不存在于y中,但是ceil(x)给出1并且存在于y中。因此,对于x中的每个元素,需要将其向上和向下舍入,然后与y中的每个元素进行比较以找到匹配。
有没有更有效和/或更好的方法来实现这一目标?

xxb16uws

xxb16uws1#

与地板/天花板相比,似乎是合理的。

out = x[np.isin(np.floor(x), y) | np.isin(np.ceil(x), y)]

输出:array([0.43, 2.11, 3.67, 4.12, 8.87, 9.1 ])
如果你有足够的内存来广播,你可以检查y的绝对距离是否在1:

out = x[(abs(x-y[:, None]) < 1).any(axis=0)]
# array([0.43, 2.11, 3.67, 4.12, 8.87, 9.1 ])

# or to get values of y
out = y[(abs(x-y[:, None]) < 1).any(axis=1)]
# array([ 1,  3,  5,  9, 10])

相关问题