更一般地,如果您创建一个切片元组(这适用于任意维度),则可以确定要插入数组的位置:
>>> a = np.random.random((5,5))
>>> b = np.ones((3,3))
>>> edge_coordinate = (0,0)
>>> slicer = tuple(slice(edge, edge+i) for edge, i in zip(edge_coordinate, b.shape))
>>> a[slicer] = b
>>> a
array([[ 1. , 1. , 1. , 0.14206495, 0.36385016],
[ 1. , 1. , 1. , 0.08861402, 0.7888898 ],
[ 1. , 1. , 1. , 0.1975496 , 0.13345192],
[ 0.550487 , 0.22471952, 0.47050879, 0.04669643, 0.13480528],
[ 0.25139511, 0.06499812, 0.42247189, 0.05840351, 0.74735495]])
通过改变edge_coordinate
,您可以改变位置:
>>> a = np.random.random((5,5))
>>> b = np.ones((3,3))
>>> edge_coordinates = (1,1)
>>> slicer = tuple(slice(edge, edge+i) for edge, i in zip(edge_coordinates, b.shape))
>>> a[slicer] = b
>>> a
array([[ 0.21385714, 0.68789872, 0.3915475 , 0.67342566, 0.05642307],
[ 0.19778658, 1. , 1. , 1. , 0.70717406],
[ 0.73678924, 1. , 1. , 1. , 0.90285997],
[ 0.39709332, 1. , 1. , 1. , 0.96959814],
[ 0.89627195, 0.21295355, 0.72598992, 0.80749348, 0.76660287]])
理想情况下,如果您经常使用它,可以将其制作成一个函数。
b
具有随机值。那么您需要什么:从b
中填充a
的值,还是用零填充?填充在右侧和底部吗? - trincotb[?:?, ?:?] = a
?这将切片匹配b
的块,作为放置a
的位置。 - hpauljb
应该是np.zeros
。另外,最好填充的位置是居中的,但左上角也可以。 - étale-cohomology