代码之家  ›  专栏  ›  技术社区  ›  Andreas Kjær Dideriksen

移位数组而不丢失数据python

  •  1
  • Andreas Kjær Dideriksen  · 技术社区  · 6 年前

    我有一些3d数据数组,我想沿着第三轴堆叠。 我想堆叠这些立方体,使每个立方体的x-y平面上的数据峰值堆叠到下一个立方体的下一个峰值上。为了做到这一点,我需要沿x,y平面移动每个数据立方体,以对齐每个立方体的峰值。然而,我需要一个不会像通常的移位例程那样剪切数据的移位。

    我正在寻找的want的简化版本如下所示:

    A = [1, 2, 3, 4]
    b = shift(A, 2)  ## shift A 2 steps
    b = [0, 0, 1, 2, 3, 4]
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   RagingRoosevelt    6 年前

    如果您定义 shift 具体如下:

    def shift(a, k):
        return [0 for _ in range(k)] + a
    

    然后你得到

    A = [1, 2, 3, 4]
    b = shift(A, 2)
    print(b) # [0, 0, 1, 2, 3, 4]
    

    如果您想让shift更通用,您可以

    def shift(a, k, side=None):
        if shift is None or shift == 'left':
            return [0 for _ in range(k)] + a
        elif shift == 'right':
            return a + [0 for _ in range(k)]
    
        2
  •  0
  •   Brenlla    6 年前

    使用它总是更好的 numpy 功能。 np.roll 保留所有数据并执行循环移位:

    A = np.array([1, 2, 3, 4])
    np.roll(A,2) #roll 2 places
    #array([3, 4, 1, 2])
    

    这并不完全是您想要的,但它确实保留了您的所有数据,而且速度很快。

    您可以使用 np.pad ,它将比 NP卷 但它更符合您的需求:

    np.pad(A,(2,0),mode='constant')
    #array([0, 0, 1, 2, 3, 4])
    

    或在两端用0填充

    np.pad(A,(2,3),mode='constant')
    #array([0, 0, 1, 2, 3, 4, 0, 0, 0])