零填充numpy数组 [英] Zero pad numpy array
问题描述
在数组末尾加零的更Python方式是什么?
What's the more pythonic way to pad an array with zeros at the end?
def pad(A, length):
...
A = np.array([1,2,3,4,5])
pad(A, 8) # expected : [1,2,3,4,5,0,0,0]
在我的实际用例中,实际上我想将数组填充到1024的最接近倍数.例如:1342 => 2048,3000 => 3072
In my real use case, in fact I want to pad an array to the closest multiple of 1024. Ex: 1342 => 2048, 3000 => 3072
推荐答案
numpy.pad
可以满足您的需要,我们可以在其中传递一个元组作为第二个参数,以告诉每个大小要填充多少个零,例如,(2, 3)
将在左侧填充 2 零,在右侧填充 3 零:
numpy.pad
with constant
mode does what you need, where we can pass a tuple as second argument to tell how many zeros to pad on each size, a (2, 3)
for instance will pad 2 zeros on the left side and 3 zeros on the right side:
将A
指定为:
A = np.array([1,2,3,4,5])
np.pad(A, (2, 3), 'constant')
# array([0, 0, 1, 2, 3, 4, 5, 0, 0, 0])
还可以通过将元组的元组作为填充宽度来填充2D numpy数组,格式为((top, bottom), (left, right))
:
It's also possible to pad a 2D numpy arrays by passing a tuple of tuples as padding width, which takes the format of ((top, bottom), (left, right))
:
A = np.array([[1,2],[3,4]])
np.pad(A, ((1,2),(2,1)), 'constant')
#array([[0, 0, 0, 0, 0], # 1 zero padded to the top
# [0, 0, 1, 2, 0], # 2 zeros padded to the bottom
# [0, 0, 3, 4, 0], # 2 zeros padded to the left
# [0, 0, 0, 0, 0], # 1 zero padded to the right
# [0, 0, 0, 0, 0]])
对于您的情况,您可以指定左侧为零,而右侧垫板则根据模块化除法计算得出:
For your case, you specify the left side to be zero and right side pad calculated from a modular division:
B = np.pad(A, (0, 1024 - len(A)%1024), 'constant')
B
# array([1, 2, 3, ..., 0, 0, 0])
len(B)
# 1024
对于更大的A
:
A = np.ones(3000)
B = np.pad(A, (0, 1024 - len(A)%1024), 'constant')
B
# array([ 1., 1., 1., ..., 0., 0., 0.])
len(B)
# 3072
这篇关于零填充numpy数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!