Ceci est lié à ma question, ici .
J'ai maintenant le code mis à jour comme suit:
import numpy as np
import _pickle as cPickle
from PIL import Image
import sys,os
pixels = []
labels = []
traindata = []
i = 0
directory = 'C:\\Users\\abc\\Desktop\\Testing\\images'
for root, dirs, files in os.walk(directory):
for file in files:
floc = file
im = Image.open(str(directory) + '\\' + floc)
pix = np.array(im.getdata())
pixels.append(pix)
labels.append(1)
pixels = np.array(pixels)
labels = np.array(labels)
traindata.append(pixels)
traindata.append(labels)
traindata = np.array([traindata[i][i],traindata[1]], dtype=object)
i = i + 1
# do the same for validation and test data
# put all data and labels into 'data' array
cPickle.dump(traindata,open('data.pickle','wb'))
FILE = open("data.pickle", 'rb')
content = cPickle.load(FILE)
print (content)
Lorsqu'il n'y a qu'une image, le code fonctionne correctement. Mais, lorsque j'ajoute une ou plusieurs images, je reçois le texte suivant:
Traceback (most recent call last):
File "pickle_data.py", line 17, in <module>
pixels.append((pix))
AttributeError: 'numpy.ndarray' object has no attribute 'append'
Comment puis-je résoudre ce problème?
Merci.
for root, dirs, files in os.walk(directory):
for file in files:
floc = file
im = Image.open(str(directory) + '\\' + floc)
pix = np.array(im.getdata())
pixels.append(pix)
labels.append(1) # append(i)???
Jusqu'ici ok. Mais vous voulez laisser pixels
sous forme de liste jusqu'à la fin de l'itération.
pixels = np.array(pixels)
labels = np.array(labels)
Vous avez eu cette affirmation juste dans votre autre question. Qu'est-il arrivé? précédent
Itérer, collecter des valeurs dans une liste, puis, à la fin, joindre des éléments dans un tableau plus grand est la bonne solution. Pour clarifier les choses, je préfère souvent utiliser des notations telles que:
alist = []
for ..
alist.append(...)
arr = np.array(alist)
Si les noms indiquent quelque chose sur la nature de l'objet, je suis moins susceptible de recevoir des erreurs comme la vôtre.
Je ne comprends pas ce que vous essayez de faire avec traindata
. Je doute que vous ayez besoin de le construire pendant la boucle. pixels
et labels
ont les informations de base.
Cette
traindata = np.array([traindata[i][i],traindata[1]], dtype=object)
vient de la question précédente. Je ne suis pas sûr que vous compreniez cette réponse.
traindata = []
traindata.append(pixels)
traindata.append(labels)
si cela est fait en dehors de la boucle est juste
traindata = [pixels, labels]
labels
est un tableau 1d, un groupe de 1 (ou [0,1,2,3 ...] si ma proposition est correcte). pixels
est un tableau de dimension supérieure. Quelle est sa forme?
Arrête toi là. Il ne sert à rien de transformer cette liste en tableau. Vous pouvez enregistrer la liste avec pickle
.
Vous copiez le code d'une question précédente et vous vous trompez de mise en forme. cPickle très grande quantité de données
Les tableaux Numpy n'ont pas de méthode append. Utilisez plutôt la fonction Numpy append:
import numpy as np
array_3 = np.append(array_1, array_2, axis=n)
# you can either specify an integer axis value n or remove the keyword argument completely
Par exemple, si array_1 et array_2 ont les valeurs suivantes:
array_1 = np.array([1, 2])
array_2 = np.array([3, 4])
Si vous appelez np.append sans spécifier de valeur d'axe, procédez comme suit:
array_3 = np.append(array_1, array_2)
array_3 aura la valeur suivante:
array([1, 2, 3, 4])
Sinon, si vous appelez np.append avec une valeur d'axe égale à 0, comme suit:
array_3 = np.append(array_1, array_2, axis=0)
array_3 aura la valeur suivante:
array([[1, 2],
[3, 4]])
Plus d'informations sur la fonction append ici: https://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html
append
sur un ndarray est ambigu; à quel axe voulez-vous ajouter les données? Sans savoir précisément à quoi ressemblent vos données, je ne peux donner qu'un exemple en utilisant numpy.concatenate
que j'espère aidera:
import numpy as np
pixels = np.array([[3,3]])
pix = [4,4]
pixels = np.concatenate((pixels,[pix]),axis=0)
# [[3 3]
# [4 4]]
pixels = np.array(pixels)
dans cette ligne, vous réaffectez pixels
. Donc, il se peut que ce ne soit pas une liste de toute façon. Bien que pixels
ne soit pas une liste, il n'a pas d'attribut append
. Est-ce que ça fait du sens?