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())
labels.append(1) # append(i)???
So far ok. But you want to leave pixels as a list until you are done with the iteration.
pixels = np.array(pixels)
labels = np.array(labels)
You had this indention right in your other question. What happened? previous
Iterating, collecting values in a list, and then at the end joining things into a bigger array is the right way. To make things clear I often prefer to use notation like:
alist = 
arr = np.array(alist)
If names indicate something about the nature of the object I'm less likely to get errors like yours.
I don't understand what you are trying to do with traindata. I doubt if you need to build it during the loop. pixels and labels have the basic information.
traindata = np.array([traindata[i][i],traindata], dtype=object)
comes from the previous question. I'm not sure you understand that answer.
traindata = 
if done outside the loop is just
traindata = [pixels, labels]
labels is a 1d array, a bunch of 1s (or [0,1,2,3...] if my guess is right). pixels is a higher dimension array. What is its shape?
Stop right there. There's no point in turning that list into an array. You can save the list with pickle.
You are copying code from an earlier question, and getting the formatting wrong. cPickle very large amount of data