python - 修改 numpy 数组的特定单元格列表
问题描述
假设我有一个 numpy 数组并且我想更改值。我有一个特定的 (x,y) 坐标列表,指示应该添加一个附加项的单元格。下面的代码为我完成了这项工作。
>>> import numpy as np
n = 4
M = np.ones([n,n])
x = [0,1,2,3]
y = [1,2,3,0]
xy = list(zip(x,y))
alpha = 0.3
for i in range(n):
for j in range(n):
M[i,j] = alpha*M[i,j] + ((i,j) in xy)*(1-alpha)*3
>>> M
Out[1]:
array([[0.3, 2.4, 0.3, 0.3],
[0.3, 0.3, 2.4, 0.3],
[0.3, 0.3, 0.3, 2.4],
[2.4, 0.3, 0.3, 0.3]])
但是,我认为实现相同目标的方法不那么繁琐。例如,有人可以帮我摆脱两个 for 循环吗?
解决方案
是的,使用np.add.at
.
因为np.add
是 a ufunc
,所以它有一个特殊的方法at
可以让你进行简单的就地操作。
M = np.ones([n,n]) * alpha
np.add.at(M, (x, y), (1-alpha)*3)
M
Out[]:
array([[0.3, 2.4, 0.3, 0.3],
[0.3, 0.3, 2.4, 0.3],
[0.3, 0.3, 0.3, 2.4],
[2.4, 0.3, 0.3, 0.3]])
推荐阅读
- arrays - 如何从二维数组中删除和打印特定项目?
- python - dotenv 未安装在 Ubuntu 下
- bash - 打包十六进制字符串时的不一致
- c# - 如何在 C# 中发出 GET 请求,设置 Content-Type 标头和自定义标头
- asp.net - RenderPartial 在 System.Web.Mvc.Html 中不存在,但 RenderPartialExtensions 在 cshtml 中存在
- android - 如何为android中的svg图标留出余量?
- sql - 只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“用户”中的标识列指定显式值
- java - 休眠搜索中的索引无法正常工作
- ios - 键盘不会随着 resignFirstResponder 消失
- plsql - Oracle 11g 包体