是否有 NumPy 方法来更改二维数组中的一系列值?

Is there a NumPy method to change a range of values in a 2d array?

我想以一种简单的方式更改二维 NumPy 数组中的一系列值。例如,假设我有一个形状为 (5,5) 的二维数组。如果我想改变上面 2x2 'block' 的值,我可以使用 NumPy put 函数。这是一个例子:

import numpy as np

A = np.zeros(shape=(5,5))
np.put(A, [[0,1,2,5,6,7,10,11,12]], 1)

导致:

print(A)
[[1. 1. 1. 0. 0.]
 [1. 1. 1. 0. 0.]
 [1. 1. 1. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

然而,理想情况下,我想执行以下操作:使用正方形的坐标直接更改值的范围,而不展平数组。在示例中,这些坐标将是 [(0,0), (2,2)]。有没有一种 Pythonic 的方式来做到这一点?

IIUC,你可以试试:

cor = [(1,1), (2,2)]
(x1,y1),(x2,y2) = cor
a[x1:x2+1, y1:y2+1] =1

输出:

array([[0., 0., 0., 0., 0.],
       [0., 1., 1., 0., 0.],
       [0., 1., 1., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])