1
votes

Remplacement d'éléments dans un tableau Numpy

J'ai un tableau de 30 valeurs et je cherche à ajouter ces valeurs dans un tableau vide.

J'ai créé un tableau numpy vide et utilisé np.append () pour essayer d'ajouter mon valeurs dans ce tableau vide.

oldArray = np.empty(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])

J'espérais qu'en faisant cela, il mettrait à jour l'ancien tableau et donnerait la sortie correcte. Cependant, lorsque j'imprime newArray , il me donne simplement les valeurs stockées dans oldArray . Avez-vous des suggestions sur la manière d’effectuer cette opération?


4 commentaires

pouvez-vous poster un code complet?


Cela revient souvent. np.append devrait être banni dans l'oubli. Si vous souhaitez créer un objet de manière itérative, utilisez l'ajout de liste. N'essayez pas de l'imiter dans des tableaux numpy.


D'une part, vous n'avez pas créé de tableau vide, du moins rien de comparable à une liste [] . np.empty (30) est un tableau de 30 valeurs indéterminées. Pour un autre, np.append renvoie un nouveau tableau, pas une modification de l'original. Au moins, vous n'avez pas supposé qu'il agissait en place! np.append est juste une couverture mal nommée pour np.concatenate . C'est plus lent que l'ajout de liste et difficile à obtenir.


newArray = np.sqrt (valeurs) . Pas besoin d'ajouter ou de remplacer des valeurs dans un autre tableau.


3 Réponses :


0
votes

par souci de simplicité, j'ai utilisé np.zeros au lieu de np.empty car il attribue des valeurs aléatoires au tableau, j'attribue également des valeurs à un tableau.

oldArray=  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0.]
------------------------------
newArray=  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

sortie: p>

import numpy as np

values = np.ones(30)
oldArray = np.zeros(30)
diameter = np.sqrt(values)
newArray = np.append(oldArray, [diameter])

print('oldArray= ', oldArray)
print(30*'-')
print('newArray= ', newArray)


0 commentaires

0
votes

Je ne pourrais pas simuler votre problème si j'utilisais des valeurs comme des entiers, ou un tableau, il attache toujours le tableau de diamètre à la fin comme il se doit. Cependant, étant donné que vous êtes nouveau et que vous utilisez un tableau vide, je pense que vous essayez peut-être d'écrire les valeurs dans ce tableau à la place.

Voici:

oldArray:[2.59338625e+161 6.91119945e+212 5.98157061e-154], shape:(3,)
newArray:[2.59338625e+161 6.91119945e+212 5.98157061e-154 1.00000000e+000
1.00000000e+000 1.00000000e+000 1.00000000e+000 1.00000000e+000], shape:(8,)

Cela donne le oldArray rempli avec les valeurs dont vous avez besoin, sachez que ce ne serait pas l'ancien tableau, ce serait maintenant le nouveau tableau rempli:

oldArray = np.empty(3)
print(f"oldArray:{oldArray}, shape:{oldArray.shape}")
values = np.ones(5)
diameter = np.sqrt(values)
newArray = np.append(oldArray, diameter)
print(f"newArray:{newArray}, shape:{newArray.shape}")

Peut-être que vous voulez aussi ajouter des composants individuels auquel cas

[1. 1.41421 0.]

Ne donnerait que les deux valeurs modifiées

values = [1, 2]
oldArray = np.empty(3)
oldArray[0: len(values)] = np.sqrt(values)


Voici ce que j'ai essayé de simuler votre problème.

[1. 1. 1.]

quelle sortie comme il se doit:

values = 1
oldArray = np.empty(3)
oldArray[:] = np.sqrt(values)


0 commentaires

0
votes
In [29]: alist = []                                                             
In [30]: for v in values: 
    ...:     alist.append(v**.5) 
    ...: alist                                                                  
Out[30]: [0.0, 1.0, 1.4142135623730951, 1.7320508075688772]
In [31]: np.array(alist)                                                        
Out[31]: array([0.        , 1.        , 1.41421356, 1.73205081])
In [32]: np.array([v**.5 for v in values])                                      
Out[32]: array([0.        , 1.        , 1.41421356, 1.73205081])

0 commentaires