numpy.pad
con modalità constant
fa quello che ti serve, dove possiamo passare una tupla come secondo argomento per dire quanti zeri pad su ogni dimensione, un (2, 3)
per esempio sarà pad zeri sul lato sinistro e zeri sul lato destro:
Dato A
come:
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])
E 'anche possibile pad array un 2D NumPy facendo passare una tupla come larghezza imbottitura, che tak es il formato di ((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]])
Per il vostro caso, è necessario specificare il lato sinistro pari a zero e il tappetino lato destro calcolato da una divisione modulare:
B = np.pad(A, (0, 1024 - len(A)%1024), 'constant')
B
# array([1, 2, 3, ..., 0, 0, 0])
len(B)
# 1024
per una più grande 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
Grazie! Funziona se la lunghezza originale è 3000? (quindi la lunghezza imbottita dovrebbe essere 3072) – Basj
Dovrebbe, poiché la lunghezza corretta del padding qui è la differenza tra '1024' e il resto modulare di' len (A) 'diviso per' 1024'. Dovrebbe essere facile da testare. – Psidom