rlee827 - 1 year ago 178
Python Question

# Copy numpy array into part of another array

If I run the following:

``````import numpy as np
a = np.arange(9)
a = a.reshape((3,3))
``````

I will get this:

``````a = [[0 1 2]
[3 4 5]
[6 7 8]]
``````

If I create a larger array like this:

``````b = np.zeros((5,5))
b = [[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]]
``````

How do I efficiently copy
`a`
into
`b`
to get an array like this?

``````# border of 0 surrounding a to be filled in with other data later
b = [[ 0.  0.  0.  0.  0.]
[ 0.  1.  2.  3.  0.]
[ 0.  4.  5.  6.  0.]
[ 0.  7.  8.  9.  0.]
[ 0.  0.  0.  0.  0.]]
``````

I am looking for a function built into
`numpy`
if it exists.

You can specify `b[1:4, 1:4]` to denote the part:

``````>>> import numpy as np
>>> a = np.arange(9)
>>> a = a.reshape((3, 3))
>>> b = np.zeros((5, 5))
>>> b[1:4, 1:4] = a
>>> b
array([[ 0.,  0.,  0.,  0.,  0.],
[ 0.,  0.,  1.,  2.,  0.],
[ 0.,  3.,  4.,  5.,  0.],
[ 0.,  6.,  7.,  8.,  0.],
[ 0.,  0.,  0.,  0.,  0.]])

>>> b[1:4,1:4] = a + 1  # If you really meant `[1, 2, ..., 9]`
>>> b
array([[ 0.,  0.,  0.,  0.,  0.],
[ 0.,  1.,  2.,  3.,  0.],
[ 0.,  4.,  5.,  6.,  0.],
[ 0.,  7.,  8.,  9.,  0.],
[ 0.,  0.,  0.,  0.,  0.]])
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download