QNA > P > Perché Ottengo "Numpy.ndarray Object Has No Attribute Append Error"?

Perché ottengo "numpy.ndarray object has no attribute append error"?

L'errore è esattamente quello che dice l'etichetta: l'oggetto ndarray di NumPy non ha un attributo append definito nelle sue API.

main-qimg-6a85da904c6c95e483d68b16f1d853ea

L'errore in questione, per riferimento.

Possiamo iniziare chiedendo, cos'è un numpy.ndarray? NumPy è una libreria incredibilmente utile per la manipolazione dei dati in Python, che presumibilmente avete scaricato e importato nel vostro progetto Python. Contiene, tra le altre cose, la classe numpy.ndarray. "ndarray" sta per array N-dimensionale.

Se avete mai programmato in un linguaggio a tipizzazione statica come Java o Rust o C, il concetto di array vi sarà molto familiare. Un array 1-dimensionale contiene un certo numero di oggetti, tutti dello stesso tipo (ad esempio [1, 3, 2] o [0.4, 0.55, 3.14159] o ["foo", "bar", "baz"]). Fare in modo che gli array contengano lo stesso tipo significa che è più facile allocare la memoria per l'array, perché tutti gli elementi avranno la stessa dimensione in memoria. Per la stessa ragione, ogni livello di una matrice multidimensionale conterrà lo stesso numero di matrici inferiori.

Consider this 3-dimensional array:

  1. [[[0, 1, 2, 3, 4],  
  2. [5, 6, 7, 8, 9],  
  3. [10, 11, 12, 13, 14]],  
  4. [[15, 16, 17, 18, 19],  
  5. [20, 21, 22, 23, 24],  
  6. [25, 26, 27, 28, 29]]] 

Questo array contiene 2 array di 3 array di 5 interi. In NumPy, chiamiamo la sua forma (2, 3, 5). La forma di un array è fissa.[1][2] A differenza degli array dinamici che sono liste native di Python,[3] gli ndarrays non possono cambiare dimensione e forma. (È possibile, tuttavia, cambiare i valori all'interno di un ndarray, a condizione che le sostituzioni siano dello stesso tipo.)

In Python, un attributo è qualsiasi cosa che segue un punto dopo l'oggetto, che include attributi di dati (arr.shape) o metodi (arr.flatten()). numpy.ndarray.append() semplicemente non esiste.

C'è un modo per aumentare (apparentemente) la dimensione di un ndarray. Potete creare un nuovo array di dimensioni maggiori e copiare gli elementi uno per uno nel nuovo array. (Questo metodo è usato per implementare gli array dinamici.) NumPy, infatti, ha dei metodi per questo. Sono numpy.append, numpy.insert e numpy.concatenate. Si noti che questi metodi sono memorizzati nel modulo numpy e non nella classe numpy.ndarrays, da qui il motivo per cui non c'è un attributo append definito per l'oggetto ndarray. La mia ipotesi è che questo sia per chiarire che un nuovo array viene generato e restituito, non che l'array originale viene modificato. In Python, un attributo è qualsiasi cosa che segue un punto dopo l'oggetto, che include attributi di dati (arr.shape) e metodi (arr.flatten()).[4] Per gli ndarray, arr.append() semplicemente non esiste.

Note

[1] L'array N-dimensionale ([2] NumPy: le basi assolute per i principianti[3] Tipi incorporati - documentazione Python 3.8.5[4] 9. Classi - Documentazione di Python 3.8.5

Di Scarlett Scarfo

Quanto costa sviluppare un MMO? :: Perché dovrei usare Firebase per le mie app Android?
Link utili