Numpy sürüm 1.5.0 ile python 2.6.6 kullanarak 2D bir uyuşmuş diziyi nasıl sıfırlarla doldurabileceğimi bilmek istiyorum. Afedersiniz! Ama bunlar benim sınırlamalarım. Bu nedenle kullanamıyorum np.pad
. Örneğin, a
şekli eşleşecek şekilde sıfırlarla doldurmak istiyorum b
. Bunu yapmak istememin nedeni şunları yapabilmem:
b-a
öyle ki
>>> 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]])
Bunu yapmayı düşünebilmemin tek yolu eklemek, ancak bu oldukça çirkin görünüyor. Kullanan daha temiz bir çözüm var b.shape
mı?
Düzenle, MSeiferts cevabına teşekkür ederiz. Biraz temizlemek zorunda kaldım ve elimde bu:
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