I have a list say, temp_list with following properties :
len(temp_list) = 9260
temp_list[0].shape = (224,224,3)
Now, when I am converting into numpy array,
x = np.array(temp_list)
I am getting the error :
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)
Can someone help me here?
You can covert numpy.ndarray
to object
using astype(object)
This will work:
>>> a = [np.zeros((224,224,3)).astype(object), np.zeros((224,224,3)).astype(object), np.zeros((224,224,13)).astype(object)]
This method does not need to modify dtype or ravel your numpy array.
The core idea is: 1.initialize with one extra row. 2.change the list(which has one more row) to array 3.delete the extra row in the result array e.g.
>>> a = [np.zeros((10,224)), np.zeros((10,))]
>>> np.array(a)
# this will raise error,
ValueError: could not broadcast input array from shape (10,224) into shape (10)
# but below method works
>>> a = [np.zeros((11,224)), np.zeros((10,))]
>>> b = np.array(a)
>>> b[0] = np.delete(b[0],0,0)
>>> print(b.shape,b[0].shape,b[1].shape)
# print result:(2,) (10,224) (10,)
Indeed, it's not necessarily to add one more row, as long as you can escape from the gap stated in @aravk33 and @user707650 's answer and delete the extra item later, it will be fine.
Yea, Indeed @Evert answer is perfectly correct. In addition I'll like to add one more reason that could encounter such error.
>>> np.array([np.zeros((20,200)),np.zeros((20,200)),np.zeros((20,200))])
This will be perfectly fine, However, This leads to error:
>>> np.array([np.zeros((20,200)),np.zeros((20,200)),np.zeros((20,201))])
ValueError: could not broadcast input array from shape (20,200) into shape (20)
The numpy arry within the list, must also be the same size.
@aravk33 's answer is absolutely correct.
I was going through the same problem. I had a data set of 2450 images. I just could not figure out why I was facing this issue.
Check the dimensions of all the images in your training data.
Add the following snippet while appending your image into your list:
if image.shape==(1,512,512):
trainx.append(image)
I was facing the same problem because some of the images are grey scale images in my data set, so i solve my problem by doing this
from PIL import Image
img = Image.open('my_image.jpg').convert('RGB')
# a line from my program
positive_images_array = np.array([np.array(Image.open(img).convert('RGB').resize((150, 150), Image.ANTIALIAS)) for img in images_in_yes_directory])
Source: Stackoverflow.com