Python 如何将2d numpy阵列重塑为4d(无值错误)

Python 如何将2d numpy阵列重塑为4d(无值错误),python,numpy,image-processing,h5py,Python,Numpy,Image Processing,H5py,我有一个将.csv文件转换为h5(二进制)的脚本, .csv文件列包含:Image(作为numpy数组)和另外3个浮点数 import os import numpy as np from pandas.io.parsers import read_csv from sklearn.utils import shuffle import h5py FTRAIN = 'training.csv' FTEST = 'test.csv' def load(test=False, cols=No

我有一个将
.csv
文件转换为
h5
(二进制)的脚本, .csv文件列包含:Image(作为numpy数组)和另外3个浮点数

import os

import numpy as np
from pandas.io.parsers import read_csv
from sklearn.utils import shuffle
import h5py

FTRAIN = 'training.csv'
FTEST = 'test.csv'


def load(test=False, cols=None):
    """Loads data from FTEST if *test* is True, otherwise from FTRAIN.
    Pass a list of *cols* if you're only interested in a subset of the
    target columns.
    """
    fname = FTEST if test else FTRAIN
    df = read_csv(os.path.expanduser(fname))  # load pandas dataframe

    # The Image column has pixel values separated by space; convert
    # the values to numpy arrays:
    df['Image'] = df['Image'].apply(lambda im: np.fromstring(im, sep=' '))

    if cols:  # get a subset of columns
        df = df[list(cols) + ['Image']]

    print(df.count())  # prints the number of values for each column
    df = df.dropna()  # drop all rows that have missing values in them

    X = np.vstack(df['Image'].values) / 255.  # scale pixel values to [0, 1]
    X = X.astype(np.float32)

    if not test:  # only FTRAIN has any target columns
        y = df[df.columns[:-1]].values
        y = (y - 48) / 48  # scale target coordinates to [-1, 1]
        X, y = shuffle(X, y, random_state=42)  # shuffle train data
        y = y.astype(np.float32)
    else:
        y = None

    return X, y

def writeHdf5(t,data,label=None):
    with h5py.File(os.getcwd()+ '/'+t + '_data.h5', 'w') as f:
        f['data'] = data
        if label is not None:
            f['label'] = label
    with open(os.getcwd()+ '/'+t + '_data_list.txt', 'w') as f:
        f.write(os.getcwd()+ '/' +t + '_data.h5\n')


X, y = load()
X = X.reshape((X.shape[0],3,96,96))
sep = 1600
writeHdf5('train',X[0:sep],y[0:sep])
writeHdf5('val',X[sep:],y[sep:])

X,y= load(True)
X = X.reshape((X.shape[0],3,96,96))
writeHdf5('test',X,y)
当我要将X从2d重塑为4d时:

 X = X.reshape((X.shape[0],3,256,256)
X形:(104642622)(2d-转换前)

它向我显示了以下错误:

ValueError: total size of new array must be unchanged

我做错了什么?谢谢。

您正在更改阵列的大小。“重塑”允许您重新分布元素,但元素数量必须相同(即X.shape[0]的大小为2622个元素,您正在尝试将它们转换为3x256x256=196608元素数组)@Jalo谢谢。如何通过更改数组元素的数量来重塑数组?这取决于您希望如何在数组中创建新数据。您正在创建新元素,因此您必须决定它们将包含什么。用于添加行和列的一些基本函数是,您正在更改数组的大小。“重塑”允许您重新分布元素,但元素数量必须相同(即X.shape[0]的大小为2622个元素,您正在尝试将它们转换为3x256x256=196608元素数组)@Jalo谢谢。如何通过更改数组元素的数量来重塑数组?这取决于您希望如何在数组中创建新数据。您正在创建新元素,因此您必须决定它们将包含什么。用于添加行和列的一些基本函数是和