我有一个数组x
,其值包含在[a, b]
(包括a
,不包括b
)中。现在我想计算x + y
(其中y
是随机的),使得x + y
仍然包含在[a, b]
中,通过将结果值绕过左边界或右边界(取决于哪个被穿过)。
因为一个例子胜过千言万语:
>>> a, b = -5, 5
>>> x = np.array([-4, -2, 0, 2, 4])
>>> wrap(x, 3) # Compute x + 3.
[-1, 1, 3, -5, -3]
>>> wrap(x, -3) # Compute x - 3.
[3, -5, -3, -1, 1]
我想出了以下实现方法,但它并不完全令人满意。
def wrap(x, y):
if y > 0:
return (x - a + y) % (b - a) + a
elif y < 0:
return (x - b + y) % (a - b) + b
else:
return x
- 这个函数没有正确处理包含/排除边界条件;对于
wrap(x, -3)
它返回array([ 3, 5, -3, -1, 1])
而实际上5
应该是-5
。我不确定如何包含此功能。 - 此外,显式的
if
子句看起来有些人为,我想知道是否可以以更一般的方式处理它(次要问题)。
有人有解决这个问题的想法吗?
a < b
? - user202729a < b
。 - a_guest