Tambahkan array NumPy ke array NumPy


180

Saya punya numpy_array. Sesuatu seperti [ a b c ].

Dan kemudian saya ingin menambahkannya ke array NumPy lain (sama seperti kita membuat daftar daftar). Bagaimana cara membuat array array NumPy yang berisi array NumPy?

Saya mencoba melakukan yang berikut tanpa hasil

>>> M = np.array([])
>>> M
array([], dtype=float64)
>>> M.append(a,axis=0)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'append'
>>> a
array([1, 2, 3])

3
Anda dapat membuat "array array" (Anda menggunakan array objek), tetapi Anda hampir pasti tidak mau. Apa yang sedang Anda coba lakukan? Apakah Anda hanya menginginkan array 2d?
Joe Kington

Jawaban:


214
In [1]: import numpy as np

In [2]: a = np.array([[1, 2, 3], [4, 5, 6]])

In [3]: b = np.array([[9, 8, 7], [6, 5, 4]])

In [4]: np.concatenate((a, b))
Out[4]: 
array([[1, 2, 3],
       [4, 5, 6],
       [9, 8, 7],
       [6, 5, 4]])

atau ini:

In [1]: a = np.array([1, 2, 3])

In [2]: b = np.array([4, 5, 6])

In [3]: np.vstack((a, b))
Out[3]: 
array([[1, 2, 3],
       [4, 5, 6]])

1
Hai ketika saya menjalankan ini saya mendapatkan np.concatenate ini ((a, b), axis = 1) Output: array ([1, 2, 3, 2, 3, 4]) Tapi apa yang saya cari adalah array 2d numpy? ?
frazman

3
@Fraz: Saya telah menambahkan vstack()ide Sven . Anda tahu Anda bisa membuat array dengan array([[1,2,3],[2,3,4]]), kan?
endolith

concatenate () adalah yang saya butuhkan.
kakyo

1
numpy.vstackdapat menerima lebih dari 2 array dalam argumen urutan. Jadi, jika Anda perlu menggabungkan lebih dari 2 array, vstack lebih praktis.
ruhong

1
@oneleggedmule concatenatejuga dapat mengambil beberapa array
endolith

73

Nah, pesan kesalahan mengatakan semuanya: Array NumPy tidak memiliki append()metode. Namun ada fungsi gratis numpy.append():

numpy.append(M, a)

Ini akan membuat array baru alih-alih bermutasi Mdi tempatnya. Perhatikan bahwa menggunakan numpy.append()melibatkan penyalinan kedua array. Anda akan mendapatkan kode berkinerja lebih baik jika Anda menggunakan array NumPy berukuran tetap.


Hai .. ketika saya mencoba ini .. Saya mendapatkan array >>> np.append (M, a) ([1., 2., 3.]) >>> np.append (M, b) array ([ 2., 3., 4.]) >>> M array ([], dtype = float64) Saya berharap M menjadi array 2D ??
frazman

8
@Fraz: Lihatlah numpy.vstack().
Sven Marnach

Saya pikir ini harus menjadi jawaban yang diterima karena justru tepat pada intinya.
Prasad Raghavendra

31

Anda dapat menggunakan numpy.append()...

import numpy

B = numpy.array([3])
A = numpy.array([1, 2, 2])
B = numpy.append( B , A )

print B

> [3 1 2 2]

Ini tidak akan membuat dua array terpisah tetapi akan menambahkan dua array menjadi satu array dimensi.


10

Sven mengatakan itu semua, hanya akan sangat berhati-hati karena penyesuaian tipe otomatis ketika append dipanggil.

In [2]: import numpy as np

In [3]: a = np.array([1,2,3])

In [4]: b = np.array([1.,2.,3.])

In [5]: c = np.array(['a','b','c'])

In [6]: np.append(a,b)
Out[6]: array([ 1.,  2.,  3.,  1.,  2.,  3.])

In [7]: a.dtype
Out[7]: dtype('int64')

In [8]: np.append(a,c)
Out[8]: 
array(['1', '2', '3', 'a', 'b', 'c'], 
      dtype='|S1')

Seperti yang Anda lihat berdasarkan konten, dtype berubah dari int64 ke float32, dan kemudian ke S1


7

Saya menemukan tautan ini sambil mencari sesuatu yang sedikit berbeda, bagaimana cara mulai menambahkan objek array ke kosong array numpy , tetapi mencoba semua solusi pada halaman ini tetapi tidak berhasil.

Lalu saya menemukan pertanyaan dan jawaban ini: Bagaimana cara menambahkan baris baru ke array numpy kosong

Intinya di sini:

Cara untuk "memulai" array yang Anda inginkan adalah:

arr = np.empty((0,3), int)

Kemudian Anda dapat menggunakan gabungan untuk menambahkan baris seperti ini:

arr = np.concatenate( ( arr, [[x, y, z]] ) , axis=0)

Lihat juga https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html


4

Sebenarnya seseorang selalu dapat membuat daftar array numpy biasa dan mengubahnya nanti.

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

In [3]: b = np.array([[1,2],[3,4]])

In [4]: l = [a]

In [5]: l.append(b)

In [6]: l = np.array(l)

In [7]: l.shape
Out[7]: (2, 2, 2)

In [8]: l
Out[8]: 
array([[[1, 2],
        [3, 4]],

       [[1, 2],
        [3, 4]]])

2

Saya memiliki masalah yang sama, dan saya tidak bisa mengomentari jawaban @Sven Marnach (tidak cukup perwakilan, ya ampun saya ingat ketika Stackoverflow pertama kali dimulai ...).

Menambahkan daftar angka acak ke matriks 10 X 10.

myNpArray = np.zeros([1, 10])
for x in range(1,11,1):
    randomList = [list(np.random.randint(99, size=10))]
    myNpArray = np.vstack((myNpArray, randomList))
myNpArray = myNpArray[1:]

Menggunakan np.zeros () array dibuat dengan 1 x 10 nol.

array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

Kemudian daftar 10 angka acak dibuat menggunakan np.random dan ditugaskan ke daftar acak. Loopnya menumpuk 10 tinggi. Kami hanya harus ingat untuk menghapus entri kosong pertama.

myNpArray

array([[31., 10., 19., 78., 95., 58.,  3., 47., 30., 56.],
       [51., 97.,  5., 80., 28., 76., 92., 50., 22., 93.],
       [64., 79.,  7., 12., 68., 13., 59., 96., 32., 34.],
       [44., 22., 46., 56., 73., 42., 62.,  4., 62., 83.],
       [91., 28., 54., 69., 60., 95.,  5., 13., 60., 88.],
       [71., 90., 76., 53., 13., 53., 31.,  3., 96., 57.],
       [33., 87., 81.,  7., 53., 46.,  5.,  8., 20., 71.],
       [46., 71., 14., 66., 68., 65., 68., 32.,  9., 30.],
       [ 1., 35., 96., 92., 72., 52., 88., 86., 94., 88.],
       [13., 36., 43., 45., 90., 17., 38.,  1., 41., 33.]])

Jadi dalam suatu fungsi:

def array_matrix(random_range, array_size):
    myNpArray = np.zeros([1, array_size])
    for x in range(1, array_size + 1, 1):
        randomList = [list(np.random.randint(random_range, size=array_size))]
        myNpArray = np.vstack((myNpArray, randomList))
    return myNpArray[1:]

array 7 x 7 menggunakan angka acak 0 - 1000

array_matrix(1000, 7)

array([[621., 377., 931., 180., 964., 885., 723.],
       [298., 382., 148., 952., 430., 333., 956.],
       [398., 596., 732., 422., 656., 348., 470.],
       [735., 251., 314., 182., 966., 261., 523.],
       [373., 616., 389.,  90., 884., 957., 826.],
       [587., 963.,  66., 154., 111., 529., 945.],
       [950., 413., 539., 860., 634., 195., 915.]])

1

Jika saya mengerti pertanyaan Anda, ini satu cara. Katakanlah Anda memiliki:

a = [4.1, 6.21, 1.0]

jadi inilah beberapa kode ...

def array_in_array(scalarlist):
    return [(x,) for x in scalarlist]

Yang mengarah ke:

In [72]: a = [4.1, 6.21, 1.0]

In [73]: a
Out[73]: [4.1, 6.21, 1.0]

In [74]: def array_in_array(scalarlist):
   ....:     return [(x,) for x in scalarlist]
   ....: 

In [75]: b = array_in_array(a)

In [76]: b
Out[76]: [(4.1,), (6.21,), (1.0,)]

0

Coba kode ini:

import numpy as np

a1 = np.array([])

n = int(input(""))

for i in range(0,n):
    a = int(input(""))
    a1 = np.append(a, a1)
    a = 0

print(a1)

Anda juga dapat menggunakan larik alih-alih "a"

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.