【问题标题】:How to add a dimension to a numpy array in Python如何在 Python 中向 numpy 数组添加维度
【发布时间】:2017-01-18 14:28:57
【问题描述】:

我有一个大小为 (214, 144) 的数组。我需要它是 (214,144,1) 有没有办法在 Python 中轻松做到这一点?基本上尺寸应该是(天,时间,站)。因为我只有 1 个站点的数据,所以维度将是 1。但是,如果我还可以使代码足够灵活,例如 2 个站点,那就太好了(例如,将维度大小从 (428,288) 更改为 (214,144,2))那太好了!

【问题讨论】:

  • 从形状 (428, 288) 更改为 (214, 144, 2) 没有意义:您将那里的元素总数减半。你想要像(428, 144, 2) 这样的东西吗?
  • 是的,我就是这个意思!对不起! 428,144,2

标签: python arrays numpy dimensions


【解决方案1】:

你可以使用reshape:

>>> a = numpy.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
>>> a.shape
(2, 6)
>>> a.reshape((2, 6, 1))
array([[[ 1],
        [ 2],
        [ 3],
        [ 4],
        [ 5],
        [ 6]],

       [[ 7],
        [ 8],
        [ 9],
        [10],
        [11],
        [12]]])
>>> _.shape
(2, 6, 1)

除了将形状从(x, y) 更改为(x, y, 1) 之外,您还可以使用(x, y/n, n),但您可能需要根据输入指定列顺序:

>>> a.reshape((2, 3, 2))
array([[[ 1,  2],
        [ 3,  4],
        [ 5,  6]],

       [[ 7,  8],
        [ 9, 10],
        [11, 12]]])
>>> a.reshape((2, 3, 2), order='F')
array([[[ 1,  4],
        [ 2,  5],
        [ 3,  6]],

       [[ 7, 10],
        [ 8, 11],
        [ 9, 12]]])

【讨论】:

    【解决方案2】:

    1) 向任意维度的数组a 添加维度:

    b = numpy.reshape (a, list (numpy.shape (a)) + [1])
    

    说明:

    您获得a 的形状,将其转换为列表,将1 连接到该列表,然后将该列表用作reshape 操作中的新形状。

    2) 要指定维度的细分,并自动计算最后一个维度的大小,请使用-1 作为最后一个维度的大小。例如:

    b = numpy.reshape(a, [numpy.size(a,0)/2, numpy.size(a,1)/2, -1])
    

    在这种情况下b 的形状将是[214,144,4]


    (显然,如果需要,您可以将这两种方法结合起来):
    b = numpy.reshape (a, numpy.append (numpy.array (numpy.shape (a))/2, -1))
    

    【讨论】:

    • np.expand_dims(a, -1) 执行这种reshape,在末尾添加一个带有-1 参数的新轴。没有新功能,但新的 np.stack 使用它在任何新轴上连接数组。
    猜你喜欢
    • 2013-06-28
    • 2020-06-24
    • 2017-08-19
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多