【问题标题】:python difference between array(10,1) array(10,)数组(10,1)数组(10,)之间的python区别
【发布时间】:2026-01-23 17:00:02
【问题描述】:

我正在尝试将 MNIST 数据集加载到数组中。 当我使用 (X_train, y_train), (X_test, y_test)= mnist.load_data() 我得到一个数组 y_test(10000,) 但我希望它的形状为 (10000,1)。 array(10000,1) 和 array(10000,) 有什么区别? 如何将第一个数组转换为第二个数组?

【问题讨论】:

    标签: python arrays


    【解决方案1】:

    您的第一个形状为(10000,) 的数组是一维np.ndarray。 由于 numpy Arrays 的 shape 属性是一个元组,并且长度为 1 的元组需要一个尾随逗号,因此形状是 (10000,) 而不是 (10000)(这将是一个 int)。所以目前你的数据看起来像这样:

    import numpy as np
    a = np.arange(5) #  >>> array([0, 1, 2, 3, 4]
    print(a.shape) #    >>> (5,)
    

    你想要的是一个形状为(10000, 1) 的二维数组。 添加长度为 1 的维度不需要任何额外的数据,它基本上是“空”维度。要向现有数组添加维度,您可以使用 np.expand_dims()np.reshape()

    使用np.expand_dims

    import numpy as np
    b = np.array(np.arange(5))  # >>> array([0, 1, 2, 3, 4])
    b = np.expand_dims(b, axis=1)  # >>> array([[0],[1],[2],[3],[4]])
    

    该函数专门用于向数组添加空维度。 axis 关键字指定新添加的维度将占据哪个位置。

    使用np.reshape:

    import numpy as np
    a = np.arange(5) 
    X_test_reshaped = np.reshape(a, shape=[-1, 1]) # >>> array([[0],[1],[2],[3],[4]])
    

    shape=[-1, 1] 指定了重新整形操作后新形状的外观。 -1 本身将被 numpy 内部“适合数据”的形状替换。 Reshape 是一个比expand_dims 更强大的功能,并且可以以多种不同的方式使用。您可以在 numpy 文档中阅读有关它的其他用途的更多信息。 numpy.reshape()

    【讨论】: