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.
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.