是否有 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.]])
我想以一种简单的方式更改二维 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.]])