Вот решение на основе цикла, но с созданием массива нулей согласно размерам входного массива и отступов.Объяснение в комментариях:
In [192]: myArray
Out[192]:
array([[1, 2, 3],
[4, 5, 6]])
In [193]: paddings
Out[193]:
array([[1, 2],
[2, 1]])
# calculate desired shape; needed for initializing `padded_arr`
In [194]: target_shape = (myArray.shape[0], myArray.shape[1] + paddings.shape[1] + 1)
In [195]: padded_arr = np.zeros(target_shape, dtype=np.int32)
In [196]: padded_arr
Out[196]:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]], dtype=int32)
После этого мы можем использовать цикл for
для заполнения слотов последовательностей из myArray
, основываясь на значениях из paddings
:
In [199]: for idx in range(paddings.shape[0]):
...: padded_arr[idx, paddings[idx, 0]:-paddings[idx, 1]] = myArray[idx]
...:
In [200]: padded_arr
Out[200]:
array([[0, 1, 2, 3, 0, 0],
[0, 0, 4, 5, 6, 0]], dtype=int32)
Причина, по которой мы прибегаем к решению на основе цикла, заключается в том, что numpy.lib.pad()
еще не поддерживает такого рода заполнение, даже со всеми доступными дополнительными режимами и аргументами ключевых слов, которые уже есть.обеспечивает.