2016-11-19 108 views
4

的一部分,如果我运行以下命令:numpy的阵列复制到另一个阵列

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

我会得到这样的:

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

如果我创建这样一个更大的阵列:

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.]] 

如何有效地将a复制到b中以获得像这样的数组?

# 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.]] 

我要找内置numpy如果它存在的功能。

回答

6

您可以指定b[1:4, 1:4]表示部分:

>>> 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.]]) 
+0

这'[ 1..9]'是我的错误,但这完全解决了我的问题。 – rlee827

1

只是作为一个替代方案,如果你想要一个非零不同的填充值,您可以使用此选项

>>> a = np.arange(9.).reshape(3,3) 
>>> np.pad(a, 1, 'constant', constant_values=0) 
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.]]) 
>>> np.pad(a, 1, 'constant', constant_values=5) 
array([[ 5., 5., 5., 5., 5.], 
     [ 5., 0., 1., 2., 5.], 
     [ 5., 3., 4., 5., 5.], 
     [ 5., 6., 7., 8., 5.], 
     [ 5., 5., 5., 5., 5.]])