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
使用浮点数的示例的输出似乎更容易理解:
>>> 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)