numpy.lib.stride_tricks.as_strided
के नतीजे NumPy सरणी के प्रकार पर निर्भर करते हैं?numpy.as_strided के परिणाम इनपुट dtype पर निर्भर करेगा?
यह सवाल .strides
की परिभाषा है, जो बाइट्स जब एक सरणी traversing प्रत्येक आयाम में कदम रखने की
टपल से उठता है।
निम्नलिखित प्रश्नों का पालन करें जिन्हें मैंने अन्य प्रश्नों में उपयोग किया है। यह 1 डी या 2 डी सरणी लेता है और लंबाई window
की ओवरलैपिंग विंडो बनाता है। परिणाम इनपुट से एक आयाम अधिक होगा।
def rwindows(a, window):
if a.ndim == 1:
a = a.reshape(-1, 1)
shape = a.shape[0] - window + 1, window, a.shape[-1]
strides = (a.strides[0],) + a.strides
windows = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return np.squeeze(windows)
# examples
# rwindows(np.arange(5), window=2)
# rwindows(np.arange(20).reshape((5,4)), window=2)
प्रगति की परिभाषा और क्योंकि, उदाहरण के लिए,
अन्यथा बराबर dtype float32
और float64
की सरणियों की वजह से
विभिन्न प्रगति, यह कभी ऊपर मेरी rwindows
समारोह को उड़ाने होगा?
मैंने परीक्षण करने की कोशिश की है लेकिन यह एक गैर-संपूर्ण तरीके से रहा है और मैं एक उत्तर की तलाश में हूं कि (1) बताता है कि फ़ंक्शन डॉक्टर से अस्वीकरण/चेतावनी के बारे में कुछ भी नहीं है जो मैं यहां पूछ रहा हूं और (2) बताता है कि अन्य dtypes & चरणों के साथ अन्यथा समकक्ष सरणी क्यों उपरोक्त में अलग-अलग परिणाम प्राप्त करेंगे।
मैंने दो समस्याएं देखी हैं। यदि आकार सही नहीं है, तो आप बफर के अंत से 'स्ट्रिंगिंग' को समाप्त कर सकते हैं। सभी अनुक्रमित मान वैध हैं यह सुनिश्चित करने के लिए कोई सुरक्षा नहीं है। दूसरा, घुमावदार सरणी पर कई ऑपरेशन एक प्रति बनाते हैं। वह प्रतिलिपि मूल सरणी या घुमावदार दृश्य से कहीं अधिक बड़ी हो सकती है; यह विशेष रूप से बहुआयामी स्ट्रिंग (2 या 3 डी विंडोज़) के साथ सच है। – hpaulj
हू। ऐसा लगता है कि फ़ंक्शन इतना लोकप्रिय हो गया है कि वे वास्तव में इसे दस्तावेज़ कर रहे हैं। – user2357112