【发布时间】:2018-11-05 20:07:26
【问题描述】:
我将 3000 个 np.arrays 添加到列表中并将列表转换回 np.array。 np.array 的维度是 (270000,)。在整个循环运行和 np.array 转换过程后,结果数组的维度为:(3000,),而预期为(3000,270000)。奇怪的是,在中途停止进程时,比如在 1900 个数组处,观察到的形状是 (1900,270000),这就是我希望输出在循环结束时的样子。
from scipy import misc
from os import walk
labels = []
X=[]
Y=[]
for (_, dirnames, _) in walk(mypath):
labels.extend(dirnames)
for category, label in enumerate(labels):
# print 'Category:',category,'\tLabel:',label
for root, dirs, files in os.walk(os.path.abspath(join(mypath,label))):
for file in files:
imagePath=os.path.join(root, file)
face = misc.imread(imagePath)
flattenImgMatrix=misc.imresize(face,[300, 300], interp='nearest').flatten()
X.append(flattenImgMatrix)
Y.append([category])
arrX=np.array(X)
arrY=np.array(Y)
【问题讨论】:
-
然后检查数组的类型,例如如果内部元素的类型为
object。当 numpy 无法推断出足够的内部形状以在外部创建数字数组时,就会发生这种情况。人们通常会用形状不等的图像来喂它,但似乎你很在意这一点。另外请记住,您的代码不完整(例如 misc: skimage、scipy、imageio、matplotlib?)我们只能猜测! -
您在 1900 之后添加的一个或多个数组不具有 (270000,) 形状。例如,如果图像是彩色的,则在
imresize之后将是 (300,300,3),在展平之后将是 (810000,)。 -
啊,颜色通道。很好的猜测!我在那里太浅了。
-
感谢您的建议。它实际上超出了尺寸,即预期的(300 * 300 * 3)但有些是(300 * 300 * 1)。因此,结果数组中的 (3000,)。