2017-02-19 86 views
0

我有一個一維數組。我想計算每5個元素的最大值。困難的部分是數組的長度可以是任何值,或者是5的倍數。一個數組中每5個元素的最大值爲任意長度,python3

例如

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

的第一5個元素是0〜4,因此,最大值爲4;第二個5個元素是5到9,所以最大值是9;最後部分僅具有3個數字爲10〜12,最大值爲12。 預期結果將是

result = [4, 9, 12] 

注意,此具體示例具有13號,但實際上,它可以是任何其它值。

我的第一個想法是,當有5個數字(N * 5)的倍數時,我可以將arr重塑爲2維數組(N行和5列),然後使用np.amax獲取每行的最大值。例如,假設N = 4

arr = np.arange(20) 
arr = arr.reshape(arr.shape[0]/5, 5) 
b = np.amax(arr, axis=1) 

但是困難的是陣列的長度可以是5

非多重如何有效做呢?謝謝?

順便說一句,我使用的Python 3

回答

2

你可以這樣做:

result = [max(arr[i:i+5]) for i in range(0, len(arr), 5)] 
+0

可能是值得加入這個作品用任意長度列表/陣列,因爲切片符號不會引發IndexError。 – DeepSpace

0

您可以第一片以這樣的方式,第二列表的長度爲0len(original_list) - 1之間的列表(使用模似a[-(len(a) % 5):]),然後取第二個列表的最大值,並將其附加到第一個列表的結果(這是您從上面建議的方法中獲得的最大列表)(您得到像a[:len(a) - (len(a) % 5)])。

相關問題