Tôi muốn biết làm thế nào tôi có thể đệm một mảng số 2D với các 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 đệm a
bằng các số không sao cho hình dạng của nó khớp 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:
b-a
như vậy 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ĩ đến để làm điều này là chữa khỏi, tuy nhiên điều này có vẻ khá xấu. 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 câu trả lời của MSeiferts. Tôi đã phải dọn dẹp nó một chút, và đây là những gì tôi nhận được:
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
padded = np.zeros(b.shape)
padded[tuple(slice(0,n) for n in a.shape)] = a