我有一个连续的值流,数百万条记录。我需要找到最小值和最大值,因为数字不断进入。整个数据数组不可用。到达的数据没有存储。最小最大范围也是未知的。
我试过类似的方法,但效果不太好。有没有更好的方法来解决这些问题,使用库,numpy
,scipy
?
import numpy as np
rng = np.random.default_rng()
test = rng.choice(np.arange(-100,100, dtype=int), 10, replace=False)
testmax = 0
testmin = 0
for i in test: #simulates a stream
if i < testmax:
testmin = i
if i > testmax:
testmax = i
if i < testmin:
testmin = i
print (test, 'min: ',testmin, 'max: ', testmax)
>>> print (test, 'min: ',testmin, 'max: ', testmax)
[ 39 -32 61 -18 -53 -57 -69 98 -88 -47] min: -47 max: 98 #should be -88 and 98
>>>
>>> print (test, 'min: ',testmin, 'max: ', testmax)
[-65 -53 1 2 26 -62 82 70 39 -44] min: -44 max: 82 #should be -65 and 82
>>>
字符串
3条答案
按热度按时间2g32fytz1#
这个错误(打字错误)在注解中已经指出了,但是你只需要两个比较--这可以使用三元运算符来完成。你还应该将max初始化为负无穷大,将min初始化为正无穷大。这有助于避免这样的情况,例如,你将min设置为0,但是流中实际看到的最小数字大于0。
字符串
为什么三进制运算符超过使用
min
/max
?好吧,它更快。型
使用
if
语句和三元运算符几乎是等价的(if
快一点)。62o28rlo2#
请注意,Python方便地提供了
math.inf
和-math.inf
,它们是保证比任何可能的整数都大或小的浮点数。所以只需写:字符串
jobtbby33#
一个有趣的itertools版本,如果有人 * 实际上 * 想要实时的最小/最大值,而不仅仅是最终的:
字符串
输出(Attempt This Online!):
另一个解决方案,阅读1000块:
型
Attempt This Online!的