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])
orang gila
sumber
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]])
endolit
sumber
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.

Sven Marnach
sumber
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.

Zhai Zhiwei
sumber
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

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

Clay Coleman
sumber
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]]])
Michael Ma
sumber
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.]])
Sayap
sumber
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,)]
linhares
sumber
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"

Mehdi
sumber