2010-10-30 6 views
0

J'ai 3 extraits de code:Python Numpy ndarray

(1) 

x = array([[]]) #x.ndim=2 
x=append(x,[[1,2]]) #after this, x.ndim=1??????????????????? 
x=append(x,[[3,4]],axis=0) #error b/c dimension 

(2) 
    x = array([[]]) #x.ndim=2 
    x=append(x,[[1,2]],axis=0) #error b/c dimension????????????????? 

(3) 
    x=append([[1,2]],[[3,4]],axis=0) #Good 

Le (???????????) est la partie que je ne comprends pas. Peux-tu expliquer?

Je préfère (2) qui déclare un numpy.ndarray de 2 axises d'abord puis ajoute des données plus tard. Comment puis je faire ça?

Merci.

Répondre

1

De la documentation append:

 
Definition:  append(arr, values, axis=None) 
Docstring: 
    Append values to the end of an array.                  

    Parameters 
    ---------- 
    arr : array_like 
     Values are appended to a copy of this array. 
    values : array_like 
     These values are appended to a copy of `arr`. It must be of the 
     correct shape (the same shape as `arr`, excluding `axis`). If `axis` 
     is not specified, `values` can be any shape and will be flattened 
     before use. 
    axis : int, optional 
     The axis along which `values` are appended. If `axis` is not given, 
     both `arr` and `values` are flattened before use. 

C'est, pourquoi votre exemple (1) n'est que vous ne spécifiez pas un argument de l'axe pour la première append, x est aplatie, et par conséquent la seconde L'ajout échoue car les formes ne correspondent plus.

Votre deuxième exemple échoue car les formes ne correspondent pas. Au début, x.shape = (1,0), c'est-à-dire 1 ligne et 0 colonnes. Ensuite, vous essayez d'ajouter un tableau avec la forme (1,2) le long de l'axe 0 (c'est-à-dire que vous voulez que le tableau des résultats ait plus de lignes mais le même nombre de colonnes), ce qui ne fonctionne évidemment pas des colonnes ne correspond pas. En aparté, personnellement, je n'utilise presque jamais append() lorsque je travaille avec numpy. Il est beaucoup plus efficace d'allouer la bonne taille à l'avance, puis d'utiliser le découpage en tranches pour le remplir plutôt que d'utiliser l'ajout qui implique une réaffectation et une copie à chaque fois.

Questions connexes