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.

robintw
sumber
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])
steabert.dll
sumber
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)
Jurgen Strydom
sumber
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.

DMA57361
sumber
12

Coba ini:

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

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

concatenate membutuhkan kedua elemen untuk menjadi array numpy; namun, [0] bukanlah larik. Itulah mengapa tidak berhasil.

reader_1000
sumber
Atau, lebih sederhana np.concatenate((a, [a[0]])). Daftar tersebut akan dipromosikan menjadi tipe array secara otomatis, menghemat beberapa pengetikan.
Fisikawan Gila
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])
Amjad
sumber
7
t = np.array([2, 3])
t = np.append(t, [4])
pengguna2804741
sumber
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])
Simon Streicher
sumber
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]

Nandan Kulkarni
sumber
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.

adejonghm
sumber