Zero pad numpy array
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:
Given A
as:
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])
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
For a larger 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
For future reference:
def padarray(A, size):
t = size - len(A)
return np.pad(A, pad_width=(0, t), mode='constant')
padarray([1,2,3], 8) # [1 2 3 0 0 0 0 0]
For your use case you can use resize() method:
A = np.array([1,2,3,4,5])
A.resize(8)
This resizes A
in place. If there are refs to A
numpy throws a vale error because the referenced value would be updated too. To allow this add refcheck=False
option.
The documentation states that missing values will be 0
:
Enlarging an array: as above, but missing entries are filled with zeros