संख्यात्मक में सरणी के लिए एकल तत्व जोड़ें


122

मेरे पास एक सुपीरियर सरणी है:

[1, 2, 3]

मैं एक सरणी बनाना चाहता हूँ:

[1, 2, 3, 1]

यही है, मैं पहले तत्व को सरणी के अंत में जोड़ना चाहता हूं।

मैंने स्पष्ट करने की कोशिश की है:

np.concatenate((a, a[0]))

लेकिन मैं एक त्रुटि कह रहा हूँ ValueError: arrays must have same number of dimensions

मुझे यह समझ में नहीं आता - सरणियाँ दोनों सिर्फ 1d सरणियाँ हैं।


1
np.insert([1,2,3], 3, 1)
स्पार्कलर

जवाबों:


163

append() एक नया एरे बनाता है जो एप्लाइड एलिमेंट के साथ पुराना एरे हो सकता है।

मुझे लगता है कि किसी तत्व को जोड़ने के लिए उचित विधि का उपयोग करना अधिक सामान्य है:

a = numpy.append(a, a[0])

29
यह आदेश aसरणी में परिवर्तन नहीं करता है । हालाँकि, यह एक नया संशोधित सरणी देता है। तो, यदि a संशोधन की आवश्यकता है, तो a = numpy.append(a,a[0])उपयोग किया जाना चाहिए।
अमजद

np.appendका उपयोग करता है np.concatenate। यह सिर्फ यह सुनिश्चित करता है कि एडऑन का एक आयाम है। ओपी त्रुटि a[0]में 0 आयाम थे।
हंपुलज

अगर मैं सिर्फ एक तत्व जोड़ना चाहता हूं तो एपेंड एक नया सरणी क्यों बनाता है?
ed22

मुझे यह तथ्य पसंद नहीं है कि हमें इस तरह के एक साधारण कमांड के लिए दूसरे फ़ंक्शन को कॉल करने की आवश्यकता है। यह अच्छा होगा यदि सरणी में एक आंतरिक विधि ही पसंद की गई हो a.append(1), a.add(1)या सूची के अनुरूप कुछ एनालॉग भी होa + [1]
फर्नांडो विटमैन

17

हर बार और केवल एक बार या एक बार आवेदन करते समय, np.appendअपने सरणी पर उपयोग करना ठीक होना चाहिए। इस दृष्टिकोण का दोष यह है कि मेमोरी को हर बार पूरी तरह से नए सरणी के लिए आवंटित किया जाता है जिसे इसे कहा जाता है। जब एक महत्वपूर्ण मात्रा में नमूनों के लिए एक सरणी बढ़ती है, तो यह बेहतर होगा कि या तो सरणी को पूर्व-आवंटित करें (यदि कुल आकार ज्ञात हो) या किसी सूची में संलग्न करें और बाद में एक सरणी में परिवर्तित करें।

का उपयोग कर np.append:

b = np.array([0])
for k in range(int(10e4)):
    b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

बाद में सरणी में परिवर्तित अजगर सूची का उपयोग करना:

d = [0]
for k in range(int(10e4)):
    d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

पूर्व-आबंटित संख्या:

e = np.zeros((n,))
for k in range(n):
    e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

जब अंतिम आकार unkown है, तो पूर्व-आवंटन मुश्किल है, मैंने 50 के हिस्से में पूर्व-आवंटन की कोशिश की, लेकिन यह सूची का उपयोग करने के करीब नहीं आया।

85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

14

a[0]यह एक सरणी नहीं है, इसका पहला तत्व है aऔर इसलिए इसका कोई आयाम नहीं है।

a[0:1]इसके बजाय का उपयोग करने का प्रयास करें , जो aएकल आइटम सरणी के अंदर का पहला तत्व वापस कर देगा ।


12

इसे इस्तेमाल करे:

np.concatenate((a, np.array([a[0]])))

http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

समसामयिक सरणियों होने के लिए दोनों तत्वों की आवश्यकता होती है; हालाँकि, एक [0] एक सरणी नहीं है। यही कारण है कि यह काम नहीं करता है।


या, अधिक बस np.concatenate((a, [a[0]]))। सूची आपको किसी भी प्रकार को सहेजते हुए किसी भी प्रकार से स्वचालित रूप से सरणी प्रकार में पदोन्नत हो जाएगी।
मैड

10

यह आदेश,

numpy.append(a, a[0])

aसरणी में परिवर्तन नहीं करता है । हालाँकि, यह एक नया संशोधित सरणी देता है। इसलिए, यदि aसंशोधन की आवश्यकता है, तो निम्नलिखित का उपयोग किया जाना चाहिए।

a = numpy.append(a, a[0])


3

यह थोड़ा अधिक हो सकता है, लेकिन मैं हमेशा np.takeकिसी भी रैप-अराउंड इंडेक्सिंग के लिए फ़ंक्शन का उपयोग करता हूं :

>>> a = np.array([1, 2, 3])
>>> np.take(a, range(0, len(a)+1), mode='wrap')
array([1, 2, 3, 1])

>>> np.take(a, range(-1, len(a)+1), mode='wrap')
array([3, 1, 2, 3, 1])

2

मान लीजिये a=[1,2,3]और आप चाहते हैं कि यह हो [1,2,3,1]

आप बिल्ट-इन एपेंड फंक्शन का उपयोग कर सकते हैं

np.append(a,1)

यहां 1 एक इंट है, यह एक स्ट्रिंग हो सकता है और यह एरे में तत्वों से संबंधित हो सकता है या नहीं भी हो सकता है। प्रिंटों:[1,2,3,1]


StackOverflow में आपका स्वागत है! आप भी पढ़ सकते हैं इस गाइड कैसे प्रारूप करने के लिए कोड पर और फिर अपने जवाब अपडेट करें कि वह अधिक पठनीय है :) इसके अलावा इस, बेहतर कुछ नए जवाब देने के लिए स्वीकृत जवाब के साथ एक बहुत पुरानी सवाल यह है कि
0mpurdy

0

यदि आप एक तत्व उपयोग जोड़ना चाहते हैं append()

a = numpy.append(a, 1) इस स्थिति में सरणी के अंत में 1 जोड़ें

यदि आप एक तत्व का उपयोग सम्मिलित करना चाहते हैं insert()

a = numpy.insert(a, index, 1) इस स्थिति में आप 1 को जहाँ आप चाहें, इंडेक्स का उपयोग करके ऐरे में स्थिति सेट कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.