【问题标题】:How do I add rows and columns to a NUMPY array?如何将行和列添加到 NUMPY 数组?
【发布时间】:2010-12-26 23:16:17
【问题描述】:

您好,我有一个 1000 个数据系列,每个系列有 1500 个点。

它们形成一个 (1000x1500) 大小的 Numpy 数组,使用 np.zeros((1500, 1000)) 创建,然后用数据填充。

现在,如果我希望数组增长到 1600 x 1100,该怎么办?我必须使用 hstack 和 vstack 添加数组还是有更好的方法?

我希望不要更改 1000x1500 数组中已经存在的数据,基本上只在底部和右侧添加空白数据(零)。

谢谢。

【问题讨论】:

    标签: python arrays numpy reshape


    【解决方案1】:

    这应该做你想要的(ie,使用 3x3 数组和 4x4 数组来表示 OP 中的两个数组)

    >>> import numpy as NP
    >>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
    >>> a
    >>> array([[1, 2, 2],
               [7, 0, 7],
               [0, 3, 0]])
    
    >>> b = NP.zeros((4, 4))
    

    映射 a 到 b:

    >>> b[:3,:3] = a
    
    >>> b
        array([[ 1.,  2.,  2.,  0.],
               [ 7.,  0.,  7.,  0.],
               [ 0.,  3.,  0.,  0.],
               [ 0.,  0.,  0.,  0.]])
    

    【讨论】:

    • 我从该代码中得到一个错误。最后一行不应该是 b[:3, :3] = a 吗?都是一样的,再加上一个,因为当我这样做的时候它起作用了,这就是我一直在寻找的。​​span>
    【解决方案2】:

    如果您想在添加的元素中添加零,my_array.resize((1600, 1000)) 应该可以工作。请注意,这与 numpy.resize(my_array, (1600, 1000)) 不同,后者之前的行是重复的,这可能不是您想要的。

    否则(例如,如果您想避免将元素初始化为零,这可能是不必要的),您确实可以使用hstackvstack 添加包含新元素的数组; numpy.concatenate()(请参阅 pydoc numpy.concatenate)也应该可以工作(据我所知,它更通用)。

    无论哪种情况,我都猜想必须分配一个新的内存块来扩展数组,并且所有这些方法都需要大约相同的时间。

    【讨论】:

    • 请注意,在您只想扩展数据集的情况下,这似乎无法将数据保持在原位:>>> a = numpy.array([[1,2 ],[3,4]]) >>> a array([[1, 2], [3, 4]]) >>> a.resize((2,4)) Traceback(最近一次调用最后): 中的文件“”第 1 行 ValueError: cannot resize an array references or is referenced by another array in this way。使用调整大小函数 >>> a = numpy.array(a) >>> a.resize((2,4)) >>> a array([[1, 2, 3, 4], [0, 0, 0, 0]])
    【解决方案3】:

    无论如何,你都会在重新分配一块内存时遇到困难,所以使用 arr.resize()np.concatenatehstack/vstack 等并不重要。请注意,如果你正在累积大量数据按顺序排列,Python 列表通常效率更高。

    【讨论】:

      【解决方案4】:

      您应该根据您的具体要求使用reshape() 和/或resize()

      如果你想要作者的章节和诗句,你最好在 numpy 讨论板上发帖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 2012-06-21
        • 2011-04-22
        • 2014-03-05
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多