2017-04-25 85 views
0

我正在使用该接收一组的形状M x NI灰度图像作为参数的功能的应用。numpy的重塑的数据集

print(train_set.shape)  
print(train_set[0].shape) 

>>(50,) 
>>(133, 100) 

我需要重塑这个数据集来塑造(I, M, N)

我想

train_set.reshape(len(train_set),len(train_set[0]),len(train_set[0][0])) 

但我有以下错误

>>>ValueError: cannot reshape array of size 50 into shape (50,133,100) 

所以,我怎样才能重塑我的数据集(I, M, N)(50, 133, 100)在这种情况下?

编辑: 这是我如何建立数据集中

train_set =[] 
lbl_train=[] 
for cl_ in range(50): 
    for ex_ in range(15): 
     cl = str("%02d" % (cl_+1,)) 
     ex = str("%02d" % (ex_+1,)) 
     img = Image.open('cropped_faces/'+'s'+str(cl)+'_'+str(ex)+'.jpg').convert('L') 
     wpercent = (basewidth/float(img.size[0])) 
     hsize = int((float(img.size[1]) * float(wpercent))) 
     img = img.resize((basewidth, hsize), Image.ANTIALIAS) 
     lbl_train.append(cl) 
     mat = numpy.asarray(img,dtype=numpy.float) 
     train_set.append(mat.reshape(len(mat),len(mat[0]))) 

print(numpy.asarray(train_set).shape) 
print(numpy.asarray(train_set[0]).shape) 
+0

当你print(train_set [0] [0] .shape)时,你会得到什么? –

+2

尝试'np.stack(train_set)'。它看起来像你有一个数组的数组(但这些信息缺乏的问题)。根据你如何建立'train_set',numpy可能不知道如何自动将单个图像合并成一个大阵列。 – kazemakase

+0

类型(train_set)和类型(train_set [0])的输出是什么? – Allen

回答

0

好吧,我想你已经有了在train_set是numpy的阵列的NumPy的对象数组,而不是一个多维数组。这应该给你你需要的东西:

#the np.r_ function will stack all the elements from train_set as a new array with the shape(len(train_set),len(train_set[0]),len(train_set[0][0])) 
train_set = np.r_[train_set.tolist()] 
train_set.shape 
Out[788]: (50, 133, 100) 
+0

我做了什么,你说,但输出仍是一样的'train_set = numpy.r_ [train_set.tolist()] 打印(train_set.shape)'>>(50, ) –

+0

我发现了这个问题,train_set中的一些图片有不同的尺寸...前六张图片(133,100) (129,100) (149,100) (149,100) (151,100 ) (149,100) –