移位数组而不会丢失数据python

时间:2018-04-19 21:04:31

标签: python multidimensional-array scipy interpolation shift

我有一些3d数据数组,我想沿第3轴堆叠。 我想堆叠立方体,使得每个立方体的x-y平面中的数据峰堆叠到下一个立方体的下一个峰上。为此,我需要沿x,y平面移动每个数据立方体,以对齐每个立方体的峰值。但是,我需要一个不会像通常的班次例程那样削减数据的班次。

我想要的简化版本看起来像是:

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

2 个答案:

答案 0 :(得分:0)

如果您将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]

如果你想让转变更加多样化,你可以做到

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

答案 1 :(得分:0)

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