下面是Numpy数组。
a = np.array([0.1, 0.9, 0.17, 0.47, 0.5])
字符串
我怎样才能找到一个数字,当乘以数组时,每个元素都变成整数?
例如,在这种情况下,这个数字应该是100,因为a
乘以100会使每个元素都是整数。
>>> a * 100
array([10., 90., 17., 47., 50.])
型
我试过用10的最长十进制数的幂来计算,但是,我需要找到一个可能的最小数(而且它必须大于0)。
b = np.array([1.0, 0.5, 0.25, 0.75, 0.5])
型
因此,在这种情况下,该数字应该是4而不是100。
>>> b * 4
array([4., 2., 1., 3., 2.])
型
2条答案
按热度按时间bxgwgixi1#
从你的策略开始。得到使你的数组成为整数的10的最小幂。然后将它转换为整数并得到公约数。你想要的数字是10的幂除以公约数:
字符串
这里d是
25
,你想要的数字是100/25
→4
。ojsjcaue2#
可接受的答案可以通过使用
import fractions
来扩展,以便它包括找到“公差”,即“使数组整数的10的最小幂”。这使得解决任意实值浮点数变得更容易。以下是原始示例和当前接受的答案:
字符串
输出:
4.0 [4. 2. 1. 3. 2.]
如果未调整最小幂10,则以下示例不适用于当前接受的答案:
型
输出:
100.0 [20. 18.18181818 20. 44.44444444 23.80952381]
但是有了这个解决方案,你不需要先找到10的最小幂:
型
它仍然适用于原始示例,输出:
4 [4. 2. 1. 3. 2.]
但它也适用于新的示例,输出:
3465 [ 693. 630. 693. 1540. 825.]
正如马克·迪金森(Mark Dickinson)对公认答案here的评论所指出的那样,它可能不适用于分数超过100万的分数。