2016-11-19 139 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.]])