在不丢失数据的情况下移动数组 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])
我有一些 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])