Tôi muốn biết làm thế nào tôi có thể pad một mảng numpy 2D với số không bằng cách sử dụng python 2.6.6 với phiên bản numpy 1.5.0. Lấy làm tiếc! Nhưng đây là những hạn chế của tôi. Do đó tôi không thể sử dụng np.pad
. Ví dụ, tôi muốn pad a
với số không sao cho hình dạng của nó khớp với b
. Lý do tại sao tôi muốn làm điều này là vì vậy tôi có thể làm:python làm thế nào để pad mảng numpy với số không
b-a
mà
>>> a
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
>>> b
array([[ 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3.]])
>>> c
array([[1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0]])
Cách duy nhất tôi có thể nghĩ để làm điều này là phụ thêm, tuy nhiên điều này có vẻ khá xấu xí. là có một giải pháp sạch hơn có thể sử dụng b.shape
?
Chỉnh sửa, Cảm ơn bạn đã trả lời MSeiferts. Tôi phải làm sạch nó lên một chút, và đây là những gì tôi nhận:
def pad(array, reference_shape, offsets):
"""
array: Array to be padded
reference_shape: tuple of size of ndarray to create
offsets: list of offsets (number of elements must be equal to the dimension of the array)
will throw a ValueError if offsets is too big and the reference_shape cannot handle the offsets
"""
# Create an array of zeros with the reference shape
result = np.zeros(reference_shape)
# Create a list of slices from offset to offset + shape in each dimension
insertHere = [slice(offsets[dim], offsets[dim] + array.shape[dim]) for dim in range(array.ndim)]
# Insert the array in the result at the specified offsets
result[insertHere] = array
return result
Tôi có thể đề xuất cho bạn cách để làm điều đó mà không cần đệm không? – purpletentacle