【问题标题】:Resizing and stretching a NumPy array调整和拉伸 NumPy 数组
【发布时间】:2011-05-12 16:49:36
【问题描述】:

我正在使用 Python,我有一个像这样的 NumPy 数组:

[1,5,9]
[2,7,3]
[8,4,6]

我如何将它拉伸成类似下面的样子?

[1,1,5,5,9,9]
[1,1,5,5,9,9]
[2,2,7,7,3,3]
[2,2,7,7,3,3]
[8,8,4,4,6,6]
[8,8,4,4,6,6]

这些只是一些示例数组,我实际上会调整几个数组大小,而不仅仅是这些。

我是这方面的新手,我似乎无法完全理解我需要做什么。

【问题讨论】:

    标签: python arrays resize numpy stretch


    【解决方案1】:

    @KennyTM 的回答非常巧妙,确实适合您的情况,但作为替代方案,可以为扩展数组提供更多灵活性,请尝试np.repeat

    >>> a = np.array([[1, 5, 9],
                  [2, 7, 3],
                  [8, 4, 6]])
    
    >>> np.repeat(a,2, axis=1)
    array([[1, 1, 5, 5, 9, 9],
           [2, 2, 7, 7, 3, 3],
           [8, 8, 4, 4, 6, 6]])
    

    所以,这完成了沿一个轴重复,沿多个轴(如您所愿),只需嵌套 np.repeat 调用:

    >>> np.repeat(np.repeat(a,2, axis=0), 2, axis=1)
    array([[1, 1, 5, 5, 9, 9],
           [1, 1, 5, 5, 9, 9],
           [2, 2, 7, 7, 3, 3],
           [2, 2, 7, 7, 3, 3],
           [8, 8, 4, 4, 6, 6],
           [8, 8, 4, 4, 6, 6]])
    

    您还可以更改任何初始行或列的重复次数。例如,如果您希望除最后一行之外的每一行重复两次:

    >>> np.repeat(a, [2,2,1], axis=0)
    array([[1, 5, 9],
           [1, 5, 9],
           [2, 7, 3],
           [2, 7, 3],
           [8, 4, 6]])
    

    这里,当第二个参数是 list 时,它指定逐行(在本例中为行,因为 axis=0)对每一行重复。

    【讨论】:

      【解决方案2】:

      不幸的是,numpy 不允许小数步(据我所知)。这是一种解决方法。它不像 Kenny 的解决方案那么聪明,但它利用了传统的索引:

      >>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
      >>> step = .5
      >>> xstop, ystop = a.shape
      >>> x = numpy.arange(0,xstop,step).astype(int)
      >>> y = numpy.arange(0,ystop,step).astype(int)
      >>> mg = numpy.meshgrid(x,y)
      >>> b = a[mg].T
      >>> b
      array([[1, 1, 5, 5, 9, 9],
             [1, 1, 5, 5, 9, 9],
             [2, 2, 7, 7, 3, 3],
             [2, 2, 7, 7, 3, 3],
             [8, 8, 4, 4, 6, 6],
             [8, 8, 4, 4, 6, 6]])
      

      (dtlussier的解决方案更好)

      【讨论】:

        【解决方案3】:
        >>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
        >>> numpy.kron(a, [[1,1],[1,1]])
        array([[1, 1, 5, 5, 9, 9],
               [1, 1, 5, 5, 9, 9],
               [2, 2, 7, 7, 3, 3],
               [2, 2, 7, 7, 3, 3],
               [8, 8, 4, 4, 6, 6],
               [8, 8, 4, 4, 6, 6]])
        

        【讨论】:

        猜你喜欢
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多