这与我的问题here有关。
我现在有更新的代码,如下所示:
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)
当只有一个图像时,代码可以正常运行。但是,当我添加其他图像或更多图像时,得到以下信息:
Traceback (most recent call last):
File "pickle_data.py", line 17, in <module>
pixels.append((pix))
AttributeError: 'numpy.ndarray' object has no attribute 'append'
我该如何解决这个问题?
谢谢。
最佳答案
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)???
到目前为止还好。但是您要保留
pixels
作为列表,直到完成迭代为止。pixels = np.array(pixels)
labels = np.array(labels)
您在其他问题中有这个缩进权。发生了什么? previous
迭代,收集列表中的值,然后最后将事物连接到更大的数组中是正确的方法。为了清楚起见,我经常喜欢使用如下符号:
alist = []
for ..
alist.append(...)
arr = np.array(alist)
如果名称表明对象的性质,那么我不太可能出现像您这样的错误。
我不明白您要使用
traindata
做什么。我怀疑您是否需要在循环期间进行构建。 pixels
和labels
具有基本信息。那
traindata = np.array([traindata[i][i],traindata[1]], dtype=object)
来自上一个问题。我不确定您是否理解该答案。
traindata = []
traindata.append(pixels)
traindata.append(labels)
如果在循环外完成只是
traindata = [pixels, labels]
labels
是一个1d数组,一堆1s(如果我的猜测是正确的,则为[0,1,2,3 ...])。 pixels
是一个高维数组。它的形状是什么?停在那儿。将该列表转换为数组没有任何意义。您可以使用
pickle
保存列表。您正在从先前的问题中复制代码,并且格式错误。 cPickle very large amount of data
关于python - Python-AttributeError : 'numpy.ndarray' object has no attribute 'append' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42942781/