我有一个包含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)。这有点复杂。
答案 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
。您的代码将省略索引31
,63
等
答案 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