2012-03-19 34 views
65

Ho un array numpy. Qualcosa come [ a b c ].Aggiungi un array NumPy a un array NumPy

E poi voglio aggiungerlo in un altro array NumPy (proprio come creiamo un elenco di liste). Come creiamo un array di array NumPy contenenti array NumPy?

ho cercato di fare quanto segue senza alcuna fortuna

>>> 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]) 
+2

È possibile creare un "array di matrici" (si utilizza un array di oggetti), ma quasi sicuramente non si desidera. Cosa stai cercando di fare? Vuoi solo un array 2d? –

+2

sì .. Sto cercando di ottenere un array 2D – Fraz

+0

@Fraz: * Perché * vuoi un array 2D? Cosa stai cercando di fare? – endolith

risposta

89
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]]) 

o questo:

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

Salve quando eseguo questo ottengo questo np.concatenate ((a, b), asse = 1) Output: array ([1, 2, 3, 4, 4]) Ma quello che sto cercando è numpy Array 2d ?? – Fraz

+2

@Fraz: Ho aggiunto l'idea di 'vstack()' di Sven. Sai che puoi creare l'array con 'array ([[1,2,3], [2,3,4]]), giusto? – endolith

+0

concatenate() è quello che mi serviva. – kakyo

33

Bene, il messaggio di errore dice tutto: le matrici NumPy non hanno un metodo di append(). C'è una funzione libera numpy.append() però:

numpy.append(M, a) 

questo creerà un nuovo array invece di mutare M in atto. Si noti che l'utilizzo di numpy.append() implica la copia di entrambi gli array. Otterrai risultati migliori se utilizzi array NumPy di ​​dimensioni fisse.

+0

Ciao .. quando provo questo .. Prendo questo >>> np.append (M, a) array ([1., 2., 3.]) >>> np.append (M, b) array ([2., 3., 4.]) >>> M array ([], dtype = float64) Speravo che M fosse un array 2D ?? – Fraz

+5

@Fraz: dai un'occhiata a 'numpy.vstack()'. –

8

Sven detto tutto, basta essere molto cauti a causa di rettifiche di tipo automatico quando accodamento viene chiamato.

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

Come si può vedere in base al contenuto del DTYPE passato da Int64 a float32, e poi a S1

0

Se ho capito la tua domanda, ecco un modo. Diciamo che avete:

a = [4.1, 6.21, 1.0] 

quindi ecco qualche codice ...

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

che porta a:

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,)] 
6

È possibile utilizzare 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] 

Questo non creerà due array separati b ut aggiungerà due array in una matrice monodimensionale.

1

In realtà si può sempre creare una lista ordinaria di array numpy e convertirla in seguito.

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