2011-04-22 62 views
2

我的問題比實際上更具體一點。請看下面的數組:如何更改numpy數組的某個部分的值?

from numpy import zeros, ones 

array1 = ones((3, 3), bool) 
array1[0][0] = 0 
array1[0][2] = 0 
array1[2][0] = 0 
array1[2][2] = 0 

array2 = zeros((12, 12), bool) 

現在我正在尋找的是,我可以參照相同的比例陣列1,這樣我可以在array1加上正值到數組2的2維部分的方式它。我知道有一些方法可以使用循環來實現,但我更喜歡使用array2這樣的單個語句[(獲取array2的3x3部分的某種方式)] | = array1

回答

3

使用示例的輸出花車似乎更容易理解:

>>> a1 = numpy.ones((3, 3)) 
>>> a2 = numpy.ones((12, 12)) 
>>> a2[:3,:3] += a1 
>>> a2 
array([[ 2., 2., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 2., 2., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 2., 2., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]) 

此外,請注意,你可以做這樣的事情:

>>> a2[slice(None, a1.shape[0]), slice(None, a1.shape[1])] 
array([[ 2., 2., 2.], 
     [ 2., 2., 2.], 
     [ 2., 2., 2.]]) 
+0

注意OP使用布爾 – joaquin 2011-04-22 23:28:13

0
array2[start:end,start:end] |= array1