我有一些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]
答案 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])