Tambahkan satu elemen ke array di numpy


122

Saya memiliki array numpy yang berisi:

[1, 2, 3]

Saya ingin membuat array yang berisi:

[1, 2, 3, 1]

Artinya, saya ingin menambahkan elemen pertama ke akhir larik.

Saya telah mencoba yang jelas:

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

Tapi saya mendapatkan kesalahan mengatakan ValueError: arrays must have same number of dimensions

Saya tidak mengerti ini - array keduanya hanya array 1d.


1
np.insert([1,2,3], 3, 1)
Sparkler

Jawaban:


163

append() membuat array baru yang bisa menjadi array lama dengan elemen yang ditambahkan.

Saya pikir lebih normal untuk menggunakan metode yang tepat untuk menambahkan elemen:

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

29
Perintah ini tidak mengubah alarik. Namun, ini mengembalikan larik baru yang dimodifikasi. Jadi, kalau perlu a modifikasi maka a = numpy.append(a,a[0])harus dipakai.
Amjad

np.appendpenggunaan np.concatenate. Itu hanya memastikan addon memiliki satu dimensi. Kesalahan OP adalah a[0]memiliki 0 dimensi.
hpaulj

Mengapa append membuat array baru jika saya hanya ingin menambahkan satu elemen?
ed22

Saya tidak suka fakta bahwa kita perlu memanggil fungsi lain untuk perintah sederhana seperti itu. Akan lebih baik jika ada metode batin dalam larik itu sendiri seperti a.append(1), a.add(1)atau bahkan sesuatu yang analog dengan daftar sepertia + [1]
Fernando Wittmann

17

Saat menambahkan hanya sekali atau sekali setiap saat, menggunakan np.appenddi array Anda seharusnya baik-baik saja. Kekurangan dari pendekatan ini adalah memori dialokasikan untuk array yang benar-benar baru setiap kali dipanggil. Saat menumbuhkan array untuk sejumlah besar sampel, akan lebih baik untuk mengalokasikan array sebelumnya (jika ukuran total diketahui) atau menambahkan ke daftar dan mengonversi ke array sesudahnya.

Menggunakan 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)

Menggunakan daftar python untuk mengonversi ke array sesudahnya:

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)

Array numpy pra-alokasi:

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)

Ketika ukuran akhir alokasi awal yang tidak diketahui sulit dilakukan, saya mencoba mengalokasikan awal dalam potongan 50 tetapi tidak mendekati menggunakan daftar.

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

14

a[0]bukanlah sebuah larik, ini adalah elemen pertama dari adan oleh karena itu tidak memiliki dimensi.

Coba gunakan a[0:1]sebagai gantinya, yang akan mengembalikan elemen pertama adi dalam larik item tunggal.



10

Perintah ini,

numpy.append(a, a[0])

tidak mengubah aarray. Namun, ini mengembalikan larik baru yang dimodifikasi. Jadi, jika amodifikasi diperlukan, maka yang berikut ini harus digunakan.

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


3

Ini mungkin sedikit berlebihan, tetapi saya selalu menggunakan np.takefungsi ini untuk pengindeksan menyeluruh:

>>> 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

Katakanlah a=[1,2,3]dan Anda menginginkannya [1,2,3,1].

Anda dapat menggunakan fungsi append bawaan

np.append(a,1)

Di sini 1 adalah sebuah int, itu mungkin sebuah string dan itu mungkin atau mungkin bukan milik elemen dalam array. Cetakan:[1,2,3,1]


Selamat datang di StackOverflow! Anda mungkin ingin membaca panduan ini tentang cara memformat kode dan kemudian memperbarui jawaban Anda sehingga lebih mudah dibaca :) Juga ini adalah pertanyaan yang sangat lama dengan jawaban yang diterima, lebih baik menjawab beberapa pertanyaan baru
0mpurdy

0

Jika Anda ingin menambahkan elemen, gunakan append()

a = numpy.append(a, 1) dalam hal ini tambahkan 1 di akhir larik

Jika Anda ingin memasukkan sebuah elemen gunakan insert()

a = numpy.insert(a, index, 1) dalam hal ini Anda dapat meletakkan 1 di tempat yang Anda inginkan, menggunakan indeks untuk mengatur posisi dalam array.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.