我试图在应用函数prod(x)和shuffle(x)时得到相同的结果,其中x是一些任意整数数组,比如长度为100的数组,prod(x)是一个函数,返回x条目的乘积,shuffle是一个函数,返回x,经过洗牌。
即
我希望 prod(x) == prod(shuffle(x))为 True
如果有什么帮助,非常感谢。下面是一个比较实际的问题,如何才能得到下面的True?
import numpy as np
x = np.random.randint(100, 1000, 10)
x = np.asarray(x, dtype=np.float64)
xs = np.copy(x)
np.random.shuffle(xs)
y = np.prod(x)
ys = np.prod(xs)
print(y)
print(ys)
print(ys == y)
既然你有精度问题,你为什么不使用 np.close
在一个容许范围内检查,而不是完全平等。
#replace (ys == y) with:
np.isclose(ys, y, rtol=1e-15, equal_nan=True)
rtol=1e-10
是相对容差(你可以将它设置为你所需要的) 亲戚 错误,我建议将其设置为15或更少(大约6个字节=48位,我想float64使用52位的mantissa,但我不确定))。你可以使用 atol
争论绝对公差而不是相对公差。equal_nan=True
考虑到 NaN
s为相等(设置为 False
你想 nan
s视为不平等)。)