微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条件数组处理

如何解决条件数组处理

可能是为了了解问题的根源,我应该首先说明这是一个表面扩散问题。
例如,我有一个值矩阵:

| 0 0 0 0 3 2 |  
| 0 0 0 1 5 5 |  
| 0 1 0 2 4 5 |  
| 2 5 1 0 0 1 |  
| 1 5 5 1 0 0 |  
| 0 1 2 0 0 0 |  

对于每个单元格,我需要计算一个拉普拉斯算子(只是邻居的总和减去单元格值*4)以进行扩散建模。我开始使用的是 Numpy 的 np.roll。它的工作效率很高,可以通过手动移动轴来加速:

grid = np.array((6,6))
grid out *= -4
grid_out[1:,:] += grid[:-1,:]
grid_out[:-1,:] += grid[1:,:]
grid_out[:,1:] += grid[:,:-1]
grid_out[:,:-1] += grid[:,1:]
grid += grid_out

这里的问题是没有值 (

一个看似可行的解决方案可能是用镜像值预填充矩阵并运行上面的代码。这里会出现错误,因为例如,对于单元格 grid[2,2],不清楚要镜像 12 的哪个值。因此,一次只能为一个轴(需要分别在计算前后填充和清除)预先确定“镜像”,当然也可以单独为每个单元格预先确定。
我想在数组中利用 Numpy 的多功能性和效率,但到目前为止,我只发现了如何对数组进行简单的算术运算。我发现的 Numpy 中最接近的函数np.where,它基本上是条件单元格数组处理,看起来正是我需要的,但我不知道如何让它查看相邻单元格。>

性能在这里起着重要作用,因为这将用于更大的 3d 阵列网格,因此经典迭代是不可预期的。问题是这是否可以用 Numpy 实现,因为它比直接使用一堆 if 甚至在 Numba 上进行迭代要快,我已经尝试过了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。