【问题标题】:reshape fails with total size of new array must be unchanged even for correct dimenions重塑失败,即使尺寸正确,新数组的总大小也必须保持不变
【发布时间】:2017-05-21 18:55:58
【问题描述】:

这是我正在尝试的示例代码

def normalizeImages(data): 
    x = np.shape(data)[0]
    y = np.shape(data)[1]
    z = np.shape(data)[2]
    w = np.shape(data)[3]
    darray = np.array(data) 
    dflat = darray.flatten() 
    mindflat = min(dflat)
    maxdflat = max(dflat)
    for x in range(0, len(dflat)): 
        dflat[x] = (dflat[x] - mindflat)/(maxdflat - mindflat)* 255 
    arraynd = np.reshape(dflat, (x, y, z, w))
    return arraynd.tolist();
X_valid = normalizeImages(X_valid)

它失败了

ValueErrorTraceback (most recent call last) <ipython-input-33-eb3d96398060> in <module>()
     19     return arraynd.tolist();
     20 
---> 21 X_valid = normalizeImages(X_valid)
     22 #X_train = normalizeImages(X_train)
     23 #X_test = normalizeImages(X_test)

<ipython-input-33-eb3d96398060> in normalizeImages(data)
     16     for x in range(0, len(dflat)):
     17         dflat[x] = (dflat[x] - mindflat)/(maxdflat - mindflat)* 255
---> 18     arraynd = np.reshape(dflat, (x, y, z, w))
     19     return arraynd.tolist();
     20 

C:\ProgramData\Miniconda3\envs\carnd-term1\lib\site-packages\numpy\core\fromnumeric.py in reshape(a, newshape, order)
    222     except AttributeError:
    223         return _wrapit(a, 'reshape', newshape, order=order)
--> 224     return reshape(newshape, order=order)
    225 
    226 

ValueError: total size of new array must be unchanged

输入 X_valid 是一个 4 维形状列表 (4410, 32, 32, 3)。谁能解释为什么会失败以及如何解决?

【问题讨论】:

  • 不是说它回答了你的问题,而是你为什么要扁平化你的数据——为什么要使用 for 循环?
  • 您正在更改循环中变量 x 的值。这里for x in range(0,len(dflat)):
  • 我是 python 新手,所以我只能使用循环和展平。感谢您的酷方法!我一直在寻找这个很久,但从来没有意识到 x 在代码中的明显用法。感谢您发现错误。

标签: python arrays numpy jupyter


【解决方案1】:

您正在更改循环中变量x 的值。改为这样做;你甚至不需要循环

def normalizeImages(data):
    darray = np.array(data) 
    x, y, z, w = np.shape(darray)
    dflat = darray.flatten() 
    mindflat = min(dflat)
    maxdflat = max(dflat)
    dflat = (dflat - mindflat)/(maxdflat - mindflat) * 255 
    return dflat.reshape(x, y, z, w).tolist()

您甚至不需要重塑数据

def normalizeImages(data):
    darray = np.array(data) 
    mind, maxd = darray.min(), darray.max()
    darray = (darray - mind)/(maxd - mind) * 255 
    return darray.tolist()

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多