2012-05-25 10 views
7

मैं यह जांचना चाहूंगा कि दो अंडाकार एक ही अंतर्निहित ndarray के विचारों को ओवरलैप कर रहे हैं या नहीं।मैं कैसे जांचूं कि numpy arrays के दो स्लाइस समान हैं (या ओवरलैपिंग)?

इसकी जांच करने के दो स्लाइस बिल्कुल वैसा ही कर रहे हैं, मैं की तरह कुछ कर सकते हैं:

a.base is b.base and a.shape == b.shape and a.data == b.data 

बफ़र्स की तुलना एक साधारण मामले में काम करने के लिए लग रहा था - किसी ने मुझे बता सकते हैं कि यह सामान्य रूप में काम करता है?

दुर्भाग्य से, यह स्लाइस ओवरलैपिंग के लिए काम नहीं करेगा, और मुझे पता नहीं लगा है कि बफर से निकालने का तरीका अंतर्निहित डेटा में क्या है - शायद कोई इस से मेरी सहायता कर सकता है?

इसके अलावा, कहते हैं कि a और bx की स्लाइस हैं, और cb का एक टुकड़ा है। चूंकि अंतर्निहित डेटा समान है, इसलिए मैं c और a के बीच ओवरलैप का पता लगाना चाहूंगा। ऐसा लगता है कि मुझे सिर्फ बफर और आकार की तुलना करने में सक्षम होना चाहिए ... अगर कोई मुझे बिल्कुल बता सके कि मैं कैसे आभारी हूं।

उत्तर

9

numpy.may_share_memory() इस समय हमारे पास सबसे अच्छा ह्युरिस्टिक है। यह रूढ़िवादी ह्युरिस्टिक है; यह आपको झूठी सकारात्मक दे सकता है, लेकिन यह आपको झूठी नकारात्मक नहीं देगा। मुझे लगता है कि ह्युरिस्टिक को 100% सही होने में सुधार करने के तरीके हो सकते हैं। अगर वे बाहर निकलते हैं, तो वे उस समारोह में तब्दील हो जाएंगे, इसलिए यह सबसे अच्छा तरीका है।

+0

मैं किस तरह के मामलों में विफल होने की उम्मीद कर सकता हूं? कि झूठी सकारात्मक उत्पन्न गैर एकता कदम के साथ अपने बस टेढ़े-स्लाइस, मैं उस के साथ रह सकते हैं .... – shaunc

+2

'एक्स [0 :: 2]'/'एक्स [1 :: 2]'। 'एक्स [:, 0: 5]', 'x [:, 5:10]'। 'x = np.dstack (* args); np.may_share_memory (x [0], x [1]) '। –

1

यह तुलना करना संभव हो सकता है कि ctypes सरणी की संपत्ति का उपयोग करके सूचकांक स्मृति में रहते हैं। इसमें कुछ काम हो सकता है, इसलिए आप वापस कदम उठाना चाहते हैं और देख सकते हैं कि आपकी समस्या को हल करने का कोई अलग तरीका है या नहीं।

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