有什么Pythonic方法可以得到两个数组x和y的完全相同的乘积,其中y是任意洗牌的x?

问题描述 投票:0回答:1

我试图在应用函数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)
python numpy math precision int64
1个回答
1
投票

既然你有精度问题,你为什么不使用 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 考虑到 NaNs为相等(设置为 False 你想 nans视为不平等)。)

© www.soinside.com 2019 - 2024. All rights reserved.