如何更改 numpy 数组的一部分的值?

Jay*_*man 5 python arrays numpy slice

我的问题比实际上更具体一些。考虑以下数组:

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)
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种方法,可以引用与 array1 相同比例的 array2 的二维部分,以便我可以将 array1 中的正值添加到其中。我知道有一些方法可以使用循环来完成此操作,但我更喜欢使用单个语句,例如 array2[(获取 array2 的 3x3 部分的某种方式)] |= array1

Cro*_*han 5

使用浮点数的示例的输出似乎更容易理解:

>>> 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.]])
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以执行以下操作:

>>> a2[slice(None, a1.shape[0]), slice(None, a1.shape[1])]
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
Run Code Online (Sandbox Code Playgroud)