Saya ingin tahu bagaimana saya dapat mengisi array numpy 2D dengan nol menggunakan python 2.6.6 dengan numpy versi 1.5.0. Maaf! Tetapi ini adalah batasan saya. Oleh karena itu saya tidak dapat menggunakan np.pad
. Misalnya, saya ingin mengisi a
angka nol sehingga bentuknya cocok b
. Alasan mengapa saya ingin melakukan ini adalah agar saya dapat melakukan:
b-a
seperti yang
>>> 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]])
Satu-satunya cara yang dapat saya pikirkan untuk melakukan ini adalah menambahkan, namun ini tampaknya sangat jelek. apakah ada solusi yang lebih bersih yang mungkin digunakan b.shape
?
Edit, Terima kasih atas jawaban MSeiferts. Saya harus membersihkannya sedikit, dan inilah yang saya dapatkan:
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