python - 如何枚举不包括第一行和最后一行和列的二维 NumPy 数组?
问题描述
我想枚举一个二维 NumPy 数组的元素,不包括第一行和最后一行和列(即下面矩阵中的元素)。
import numpy as np
q = np.zeros((4, 4))
q[1, 1] = 1
q[1, 2] = 1
q[2, 1] = 1
q[2, 2] = 1
# [[0. 0. 0. 0.]
# [0. 1. 1. 0.]
# [0. 1. 1. 0.]
# [0. 0. 0. 0.]]
我可以使用枚举每个元素并将条件检查添加到第一行和最后一行/列,但这似乎很粗糙:
for ij, q_ij in np.ndenumerate(q):
print(ij, q_ij)
当我切掉第一列和最后一列和行i
并j
减少一个
for ij, q_ij in np.ndenumerate(q[1:-1, 1:-1]):
i, j = ij
original_ij = (i + 1, j + 1)
print(original_ij, ij, q_ij)
# (1, 1) (0, 0) 1.0
# (1, 2) (0, 1) 1.0
# (2, 1) (1, 0) 1.0
# (2, 2) (1, 1) 1.0
我显然可以调整i
并j
正确参考原始矩阵。为了清楚起见,我正在尝试计算标量场(例如温度)的拉普拉斯算子
laplacian[i][j] = q[i+1][j] + q[i-1][j] + q[i][j+1] + q[i][j-1] - 4*a[i][j]
并且需要避开边界元素。
有没有更优雅的方法来做到这一点?
解决方案
我认为没有更多“优雅”的形式,真诚地,我将使用基本 range(1,q_ij-1)* ,但最终都是我们的编程方式,只需使用您更舒适且效果更好的形式即可
范围(开始,停止[,步骤])
推荐阅读
- javascript - 在odoo 12中从java脚本self调用python方法为null
- javascript - Google Sheets Apps 脚本更新值
- mysql - 如何在 MySQL 中重命名列
- python - 如何迭代DataFrame中的动态行?
- javascript - 运行 Angular 8 服务器时出错。如何解决需要堆栈错误?
- oracle - Oracle 类型 DIRECTORY 的 dbms_metadata.get_ddl:参数 SCHEMA 的输入值无效
- json - jq 产生内存溢出
- mysql - Spring JPA Hibernate 主键的多对多插入重复条目
- c++ - MacOS c ++ 17上的cmath错误:调用abs ambiguous
- java - 如何在 Android 应用中添加滚动视图