【发布时间】:2017-04-24 01:32:09
【问题描述】:
问题
所以我导入了一个数组,其中包含从 ~0.0 到 ~0.76 的值。当我开始尝试使用 Numpy 查找最小值和最大值时,我遇到了一些奇怪的不一致问题,如果它们是我的错,我想知道如何解决,或者如果它们在 Numpy 开发人员端出现编程错误,我想知道如何避免。
代码
让我们从使用np.max 和np.where 查找最大值的位置开始。
print array.shape
print np.max(array)
print np.where(array == 0.763728955743)
print np.where(array == np.max(array))
print array[35,57]
输出是这样的:
(74, 145)
0.763728955743
(array([], dtype=int64), array([], dtype=int64))
(array([35]), array([57]))
0.763728955743
当我查找数组与最大条目的值完全相等的位置时,Numpy 没有找到它。但是,当我只是搜索最大值的位置而不指定该值是什么时,它会起作用。请注意,np.min 不会发生这种情况。
现在我有一个关于最小值的不同问题。
print array.shape
print np.min(array)
print np.where(array == 0.0)
print np.where(array == np.min(array))
print array[10,25], array[31,131]
看看回报。
(74, 145)
0.0
(array([10, 25]), array([ 31, 131]))
(array([10, 25]), array([ 31, 131]))
0.0769331747301 1.54220192172e-09
1.54^-9 足够接近 0.0,这似乎是最小值。但是为什么np.where 也列出了值为 0.077 的位置?与其他值相比,这甚至不接近 0.0。
问题
为什么np.where 在输入数组的最大值时似乎不起作用,但在搜索np.max(array) 时却起作用?还有为什么np.where()和np.min()混合会返回两个位置,其中一个肯定不是最小值?
【问题讨论】:
-
Numpy 在打印值时可能会选择将
1.54e-9表示为0,但这并不意味着1.54e-9等于0...也许尝试打印repr(np.min(array))? -
np.max(array) - 0.763728955743的值是多少?大概不是零 -
@Eric,它是 -3.00426350464e-13,基本上为零。
-
至于您的最小值问题,您正在查看错误的单元格。你想要
array[10, 31]和array[25, 131],而不是array[10, 25]和array[31, 131]。 (另外,我建议不要调用你的数组array。)
标签: python arrays numpy where minimum