ValueError: Failed to transfer input array from form (22500.3) to form (1)

I relied on the code mentioned here , but with slight modifications. The version that I have is as follows:

import numpy as np import _pickle as cPickle from PIL import Image import sys,os pixels = [] labels = [] traindata = [] data=[] 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) # do the same for validation and test data # put all data and labels into 'data' array cPickle.dump(data,open('data.pkl','wb')) 

When I run the code, I get the following:

 Traceback (most recent call last): File "pickle_data.py", line 24, in <module> traindata=np.array(traindata) ValueError: could not broadcast input array from shape (22500,3) into shape (1) 

How can I solve this problem?

Thanks.

0
source share
1 answer

To understand the structure of traindata , I replaced your pixels.append(pix) with pixels.append(pix[np.ix_([1,2,3],[0,1,2])]) to have a toy example. Then I get that traindata is

 [array([[[16, 13, 15], [16, 13, 15], [16, 13, 15]]]), array([1])] 

When you tried to convert the traindata array to numpy, you got an error, because it consists of subarrays of different sizes. You can either save each of the subarrays in a separate numpy array, or do it this way:

 traindata = np.array([traindata[0][0],traindata[1]], dtype=object) 

Using dtype=object , you can create a numpy array consisting of elements of different sizes.

+1
source

Source: https://habr.com/ru/post/1265764/


All Articles