[英]Vectorized way of adding to an array that is indexed by another array - Python/NumPy
[英]vectorized way to change numpy array values based on another array
是否存在一种矢量化(或更优)的方式,可以基于除此方式以外的其他方式为numpy数组的某些数据点设置值?
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pos = np.array([[1, 2], [2, 0]])
for p in pos:
i,j = p
data[i,j] = 20
print(data)
使用更高版本的Python,您可以通过解压缩另一个可迭代对象来在理解范围内创建列表。 然后,我们传递该列表以进行切片分配。
我们访问(切片)的方式是通过整数数组索引完成的
data[[*pos]] = 20
data
array([[ 1, 2, 3],
[ 4, 5, 20],
[20, 8, 9]])
对于其他版本的Python,请尝试:
data[pos.tolist()] = 20
data
只是通过@piRSquared扩展了很好的答案。
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9],[10,11,12]])
pos = np.array([[1.0, 2.0,0.03], [2.0, 0.0,0.06]])
data = data.astype(float)
data[pos[:,0:2].astype(int).tolist()] = pos[:,-1]
data
array([[ 1. , 2. , 3. ],
[ 4. , 5. , 0.03],
[ 0.06, 8. , 9. ],
[ 10. , 11. , 12. ]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.