2017-02-19 9 views
0

私は1次元配列を持っています。私は5要素ごとに最大値を計算したいと思います。困難な部分は、配列の長さは5の倍数でもなくても、任意の値にすることができます。例えば任意の長さを持つ1つの配列の5要素ごとの最大値、python3

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

第5の要素は0〜4であるので、最大値は4です。 2番目の5つの要素は5〜9なので、最大値は9です。最後の部分のみが3つの数字、10〜12を有し、最大値は、期待される結果は、この特定の例では、13個の数字を有すること

result = [4, 9, 12] 

注あろう12 であるが、実際には他の値であってもよいです。

最初の考えは、5つの数字の倍数(N * 5)が正確にある場合、2次元配列(N行と5列)にarrを変形し、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

を使用していますが、最初の(a[-(len(a) % 5):]のようにモジュロを使用して)は、第2のリストの長さが0len(original_list) - 1の間にあるような方法であなたのリストをスライスし、次に取ることができます最初のリスト(a[:len(a) - (len(a) % 5)]のようになります)の2番目のリストの最大値と、それを結果に追加します(上記で提案した方法の最大値のリストです)。

関連する問題