यहाँ यह करने के लिए एक और अच्छा तरीका है।।
A.ravel()[:A.shape[1]**2:A.shape[1]+1]
i'th superdiagonal उपयोग के लिए:
A.ravel()[i:max(0,A.shape[1]-i)*A.shape[1]:A.shape[1]+1]
i'th subdiagonal उपयोग के लिए:
A.ravel()[A.shape[1]*i:A.shape[1]*(i+A.shape[1]):A.shape[1]+1]
आप सरणी के मुख्य विकर्ण उपयोग की एक आयामी दृश्य चाहते हैं
या सामान्य रूप से, मेरे विकर्ण के लिए जहां मुख्य विकर्ण 0 है, उपधाराएं नकारात्मक हैं और सुपरडायोनल सकारात्मक हैं, उपयोग करें:
A.ravel()[max(i,-A.shape[1]*i):max(0,(A.shape[1]-i))*A.shape[1]:A.shape[1]+1]
ये विचारों और नहीं प्रतियां हैं, इसलिए वे तेजी से एक विकर्ण निकालने के लिए चलाया जाएगा, लेकिन नई सरणी वस्तु में किए गए बदलाव मूल सरणी पर लागू होंगे। मेरी मशीन पर इन्हें मुख्य विकर्ण को स्थिर करते समय fill_diagonal फ़ंक्शन से तेज़ी से चलाया जाता है, लेकिन यह हमेशा मामला नहीं हो सकता है। इन्हें केवल एक स्थिर के बजाय विकर्ण में मानों की सरणी असाइन करने के लिए भी उपयोग किया जा सकता है।
नोट्स: छोटे सरणी के लिए यह flat
NumPy सरणी का गुण उपयोग करने के लिए तेज़ हो सकता है। यदि गति एक प्रमुख मुद्दा है तो यह A.shape[1]
एक स्थानीय चर बनाने के लिए लायक हो सकता है। इसके अलावा, यदि सरणी संगत नहीं है, ravel()
एक प्रतिलिपि वापस कर देगा, इसलिए, एक स्ट्रैड स्लाइस को मान असाइन करने के लिए, स्ट्रक्ड स्लाइस उत्पन्न करने के लिए उपयोग की जाने वाली मूल सरणी को रचनात्मक रूप से टुकड़ा करना आवश्यक होगा (यदि यह संगत है) या flat
विशेषता का उपयोग करने के लिए।
इसके अलावा, मूल रूप से यह योजना बनाई गई थी कि NumPy 1.10 में और बाद में सरणी की 'विकर्ण' विधि प्रतिलिपि के बजाय एक दृश्य वापस कर देगी। हालांकि यह परिवर्तन अभी तक नहीं बनाया गया है, लेकिन उम्मीद है कि किसी बिंदु पर इस चाल को देखने के लिए अब आवश्यक नहीं होगा। http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.diagonal.html
आप किस प्रकार का उपयोग कर रहे हैं? 'np.diag_indices_from' को v1.4 – JoshAdel
याप में जोड़ा गया था, आप सही हैं, मैं वर्तमान में पाइथन बनाम 1.3.0 – pacodelumberg
@ लैंगरहंस द्वीपों का उपयोग कर रहा हूं उम्मीद है कि आपका मतलब शून्य 1.3 है, पायथन 1.3 नहीं (जो कि नब्बे के दशक के मध्य में आया था .. ।: पी) – Dougal