8
votes

Comment puis-je ajouter des lignes et des colonnes à une matrice numpue?

Bonjour J'ai une série de données 1000 avec 1500 points dans chacun.

Ils forment une matrice numpie (1000x1500) de taille créée à l'aide de NP.zeros ((1500, 1000)), puis remplies avec les données.

maintenant et si je veux que la matrice grandisse pour dire 1600 x 1100? Dois-je ajouter des tableaux à l'aide de HStack et VStack ou y a-t-il une meilleure façon?

Je voudrais que les données déjà dans la pièce 1000x1500 du tableau ne puissent pas être modifiées, seules les données vierges (zéros) ajoutées au fond et à droite, essentiellement.

merci.


0 commentaires

4 Réponses :


0
votes

Vous devez utiliser Remoder () et / ou redize () en fonction de votre exigence précise.

Si vous voulez que le chapitre et le verset des auteurs, vous préférez probablement de poster sur la carte de discussion numpy.


0 commentaires

3
votes

Si vous voulez des zéros dans les éléments ajoutés, my_array.Resize ((1600, 1000)) devrait fonctionner. Notez que cela diffère de numpy.Resize.Resize (my_array, (1600, 1000)) , dans lequel les lignes précédentes sont dupliquées, ce qui n'est probablement pas ce que vous voulez.

sinon (par exemple, si vous souhaitez éviter d'initialiser les éléments à zéro, ce qui pourrait être inutile), vous pouvez en effet utiliser htstack et vStack pour ajouter un tableau contenant le tableau nouveaux éléments; numpy.concaténate () (voir pydoc numpy.concaténate) devrait fonctionner aussi (il est simplement plus général, autant que je sache).

Dans les deux cas, je devinerais qu'un nouveau bloc de mémoire doit être attribué afin d'étendre la matrice et que toutes ces méthodes prennent à peu près au même moment.


1 commentaires

Juste une note que cela ne semble pas conserver les données en place dans le cas où vous voulez simplement étendre le jeu de données: >>> A = numpy.array ([[1,2], [3,4]] ) >>> Un tableau ([[[[1, 2], [3, 4]]) >>> A.Resize (((2,4)) Traceback (appel le plus récent): fichier "", ligne 1, dans ValueError: Impossible de redimensionner des références de tableau ou est référencée par un autre tableau de cette manière. Utilisez la fonction de redimensionnement >>> A = Numpy.Array (a) >>> A.Resize ((2,4)) >>> Un tableau ([[1, 2, 3, 4], [0, 0, 0, 0]])



10
votes

Cela devrait faire ce que vous voulez ( c'est-à-dire em>, à l'aide de la matrice 3x3 et de la matrice 4x4 pour représenter les deux tableaux de l'OP)

>>> b[:3,:3] = a

>>> b
    array([[ 1.,  2.,  2.,  0.],
           [ 7.,  0.,  7.,  0.],
           [ 0.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])


1 commentaires

J'ai eu une erreur de ce code. La dernière ligne ne devrait-elle pas être B [: 3,: 3] = A? Tout de même, plus celui depuis quand je l'ai fait cela fonctionnait et c'est ce que je cherchais.



2
votes

Peu importe ce que vous serez coincé, vous serez coincé réaffecter une pièce de mémoire, de sorte que cela n'a pas d'importance si vous utilisez arr.Resize () , np.concaténate , htstack / vstack , etc. Notez que si vous accumulez beaucoup de données séquentiellement, les listes Python sont généralement plus efficaces.


0 commentaires