在不丢失数据的情况下移动数组 python

Shift array without losing data python

我有一些 3d 数据数组,我想沿第 3 轴堆叠它们。 我想堆叠立方体,以便每个立方体的 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]

如果您定义 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)]

使用 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.roll 慢,但它更符合你正在寻找的内容:

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])