以特定间隔查找列表最大值的最快方法

时间:2016-04-16 20:14:29

标签: python algorithm performance python-2.7 numpy

我有一个包含1024个元素的列表。我想在我确定的间隔之间检查列表的最大值。

例如X是我的numpy数组形式的列表。然后;

if np.amax(X[0:31]) > 200:
    print("1")
elif np.amax(X[0:31]) < 200:
    print("1a")

if np.amax(X[32:63] > 200:
    print("2")
elif np.amax(X[32:63] < 200:
    print("2a")

如果 - elif语句直到X [992:1023]。这意味着有16个区间和16个if-elif语句。有更有效的方法吗?

编辑:谢谢你的回答。但问题有点不同。让我试着用一个例子来解释它。这些间隔的每个结果都会点亮一个LED。有16个间隔和16个不同的LED。更多的最大值边界有3层。我没有提到它。但是例如(max <200),(200> max <500),(max> 500)。这有点复杂。

2 个答案:

答案 0 :(得分:1)

嗯,对于这样的常规间隔,标准的for循环应该这样做。首先,这将有效:

for x in xrange(0, 1024, 32):  # 0, 32, 64, ... , 992
    m = np.amax(X[x:x+32])
    if m > 200:
        print(str(x/32 + 1))  # 1, 2, 3, ... , 32 (not 16)
    elif m < 200:
        print(str(x/32 + 1) + 'a')  # 1a, 2a, 3a, ...

我假设您希望在第一个时间间隔中包含索引31。您的代码将省略索引3163

答案 1 :(得分:0)

您可以根据间隔将矩阵重塑为二维矩阵,并使用特定轴上的max函数。

interval = 32
Xnew = X.reshape(interval, len(X)/interval)
print np.max(Xnew, axis=1)  # This is an array of the max values of each consecutive interval range in X