2015-04-26 6 views
5

मैं एक सरणी से प्रत्येक एन निरंतर तत्वों के समूहों को निकालना चाहता हूं। इस तरह की एक numpy सरणी के लिए:बेवकूफ, हर एन निरंतर तत्व समूह?

a = numpy.array([1,2,3,4,5,6,7,8]) 

मैं करना चाहते हैं (एन = 5):

array([[1,2,3,4,5], 
     [2,3,4,5,6], 
     [3,4,5,6,7], 
     [4,5,6,7,8]]) 

ताकि मैं इस तरह के औसत और राशि के रूप में आगे कार्यों चला सकते हैं। मैं इस तरह की सरणी कैसे बना सकता हूं?

उत्तर

6

आप इस blog

def rolling_window(a, window): 
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) 
    strides = a.strides + (a.strides[-1],) 
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) 

In [37]: a = np.array([1,2,3,4,5,6,7,8]) 

In [38]: rolling_window(a, 5) 
Out[38]: 
array([[1, 2, 3, 4, 5], 
     [2, 3, 4, 5, 6], 
     [3, 4, 5, 6, 7], 
     [4, 5, 6, 7, 8]]) 

मैं इसे पसंद किया @ Divkar के समाधान से rolling_window इस्तेमाल कर सकते हैं। हालांकि, बड़े सरणी और खिड़कियों के लिए, आप rolling_window का उपयोग करना चाह सकते हैं? broadcasting साथ

In [55]: a = np.arange(1000) 

In [56]: %timeit rolling_window(a, 5) 
100000 loops, best of 3: 9.02 µs per loop 

In [57]: %timeit broadcast_f(a, 5) 
10000 loops, best of 3: 87.7 µs per loop 

In [58]: %timeit rolling_window(a, 100) 
100000 loops, best of 3: 8.93 µs per loop 

In [59]: %timeit broadcast_f(a, 100) 
1000 loops, best of 3: 1.04 ms per loop 
+2

उह, क्यों downvote? – Zero

+0

धन्यवाद, यह काम करता है! –

+0

मुझे पता नहीं है कि यह सिर्फ यादृच्छिक लोगों को शायद नीचे गिर रहा है !? पागल! यह मेरे ऊपर चला गया है, यह अभी भी आपके पर है। – Divakar

7

एक दृष्टिकोण -

import numpy as np 
out = a[np.arange(a.size - N + 1)[:,None] + np.arange(N)] 

नमूना रन -

In [31]: a 
Out[31]: array([4, 2, 5, 4, 1, 6, 7, 3]) 

In [32]: N 
Out[32]: 5 

In [33]: out 
Out[33]: 
array([[4, 2, 5, 4, 1], 
     [2, 5, 4, 1, 6], 
     [5, 4, 1, 6, 7], 
     [4, 1, 6, 7, 3]]) 
+1

धन्यवाद! यह सुपर सुरुचिपूर्ण है। –

+2

एक डाउनवोट आओ !? कोई विशेष कारण? – Divakar

+0

यह साफ है। कोई क्यों गिराएगा? मैं अभी भी किसी को अपने समाधान को कम करने के बारे में समझ सकता हूं, लेकिन यहां? हैंगओवर रविवार मुझे लगता है! – Zero

संबंधित मुद्दे