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?
3 Réponses :
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)
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)
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])
pouvez-vous poster un code complet?
Cela revient souvent.
np.appenddevrait ê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.appendrenvoie un nouveau tableau, pas une modification de l'original. Au moins, vous n'avez pas supposé qu'il agissait en place!np.appendest juste une couverture mal nommée pournp.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.