के अंत के आसपास मैं दो -1 डी सरणियों है, एक ब्याज (क) में से कुछ मानों और दूसरा जो कि सरणी में सूचकांक प्रदान करता है (ख)। मुझे पता है कि बी में मान हमेशा बढ़ते हैं, एक बिंदु को छोड़कर (कहीं भी हो सकता है) जहां संख्या कम हो जाती है क्योंकि यह अंत से सरणी की शुरुआत तक रोल हो जाती है। नीचे दी गई विधि काम करने लगती है, लेकिन मुझे लगता है कि एक क्लीनर तरीका मौजूद होना चाहिए। क्या कोई बेहतर कुछ सुझाव दे सकता है? धन्यवाद।अजगर/Numpy - लपेटें स्लाइस सरणी
कोड:
import numpy as np
a = np.arange(12)
b = np.array([5, 9, 2, 4])
#I want to generate these:
#[5,6,7,8,9]
#[9,10,11,0,1,2]
#[2,3,4]
#[4,5]
a = np.roll(a, -b[0], axis=0)
# Subtract off b[0] but ensure that all values are positive
b = (b-b[0]+len(a))%len(a)
for i, ind in enumerate(b):
if i < len(b)-1:
print a[b[i]:b[i+1]+1]
else:
print np.hstack((a[b[i]:len(a)], a[0]))
आप इसे का उपयोग करके एक छोटे से क्लीनर कर सकता है:
a
इस होगा 'np.roll (क, -b [i]) [: ख [i + 1] बी [i] +1] ' – JoshAdelधन्यवाद, यह क्लीनर है। यद्यपि इसमें रोल फ़ंक्शन पर संभावित रूप से कई और कॉल हैं, जो मुझे लगता है कि बहुत बड़ी सरणी के लिए चीजों को धीमा कर सकता है। क्या आप रोल का उपयोग किए बिना ऐसा करने के बारे में सोच सकते हैं? । 'के अलावा है कि एक जहां रोल-ओवर होता है सभी मामलों के लिए काम करेगा –
आप किए जा सकेंगे: बस' एक [ख [i + 1] +1 बी [मैं]] के साथ अपने 'np.roll (...' लाइन की जगह पूरे सरणी को अपने आप में जोड़ दें, और 'ए [स्टार्ट एंड एंड]' के लिए इंडेक्स को फिर से समझें, लेकिन मुझे लगता है कि यह अधिक जटिल होगा, कम नहीं। मुझे यकीन है कि यह करने के लिए एक तरीका है, बस हेवन कोशिश करने का समय नहीं था ... – Benjamin