【问题标题】:Dimension lost after adding np.array to list将 np.array 添加到列表后尺寸丢失
【发布时间】: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,)。

标签: python arrays numpy


【解决方案1】:

没有您的数据,这是不可能解决的。但是,您可以在 for 循环中添加显式检查以自行调试。这不仅会确认数组的形状是错误的,而且会提供一些有用的信息来隔离它出现的位置:

assert flattenImgMatrix.shape == (270000,), f'Error: {file}: {flattenImgMatrix.shape}'

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2022-11-10
    • 1970-01-01
    • 2013-04-02
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2011-07-19
    相关资源
    最近更新 更多