Python中NumPy数组在特定范围内的最小值和最大值

3

我正在从传感器中读取数据,其数据始终随时间变化,其数据范围在0至255之间,以np.array形式表示。

我希望在3到250之间找到最小值和最大值。

例如:

import numpy as np
a = np.array([0,1, 2, 10, 20, 100, 251, 255])
d = a.min()
c = a.max()
print (d,c)

输出结果为: (0, 255)

我想要的是 (10, 100)

有时候是这样的:a = np.array([0,1, 3, 10, 20, 100, 249, 255])

我想要的是 (3, 249)

请你帮忙。


3
为什么最大值是100和249而不是255? - Sayandip Dutta
1
@SayandipDutta,我想找出3到250之间的最小值和最大值。 - Redhwan
3个回答

3
一种方法是:
>>> a
array([0,1, 2, 10, 20, 100, 251, 255])
>>> arr_min = a[(a >= 3) & (a <= 250)].min()
>>> arr_max = a[(a >= 3) & (a <= 250)].max()
>>> (arr_min, arr_max)
(10, 100)

另一个是使用 scipy.stats.describe

>>> from scipy.stats import describe
>>> describe(a[(3 <= a) & (a <= 250)]).minmax
(10, 100)

2
你可以添加条件,然后检查minmax
a = np.array([0,1, 2, 10, 20, 100, 251, 255])
print(a[(a>=3) & (a<=250)].min())
print(a[(a>=3) & (a<=250)].max())

10
100

感谢您的帮助。输出为:(0,255)。 - Redhwan
1
抱歉,我不理解你的问题@Redhwan。 - Epsi95
其实一开始我以为起始限制和结束限制是不包括在内的。然后在你修改问题后,我改变了我的答案。 :) - Epsi95

0

只需使用现有的numpy函数创建自己的函数:

import numpy as np

def my_min(input, min_, max_):
    m = input.min()

    if m > max_:
        return max_
    elif m < min_:
        return min_
    else:
        return m

def my_max(input, min_, max_):
    m = input.max()

    if m > max_:
        return max_
    elif m < min_:
        return min_
    else:
        return m

l1 = np.array([0, 1, 2, 10, 20, 100, 251, 255])
l2 = np.array([0,1, 3, 10, 20, 100, 249, 255])

print("({}, {})".format(my_min(l1, 10, 100), my_max(l1, 10, 100)))
print("({}, {})".format(my_min(l2, 3, 250), my_max(l2, 3, 250)))

输出:

(10, 100)
(3, 250)

调用函数的方式如下:my_min(array, min, max)

考虑到数据是从传感器读取的,这种方法并不太高效。 - Péter Leéh
当然,我用正确的答案做了那个,你的代码需要修改以输出(10, 100)。那么a = np.array([0,1, 3, 10, 20, 100, 249, 255])呢? - Redhwan
好的,我编辑了答案。但它会给出正确的输出,你可以根据自己的需要使用它。 - Jakub Szlaur
打印("({}, {})".format(my_min(l1, 3, 250), my_max(l1, 3, 250))) 打印("({}, {})".format(my_min(l2, 3, 250), my_max(l2, 3, 250))) (3, 250) (3, 250),抱歉,它仍然是错误的。 - Redhwan
如果最小值是9,我需要每次更改代码吗? - Redhwan
不,你只需要调用函数并更改参数。我不明白问题出在哪里... :/ - Jakub Szlaur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接