python - 如何减少 2D numpy 代码中的 if 语句数量?
问题描述
例如,我有一个 numpy ndarray ( M
),其中包含一个包含 N x N 个数字(N 是整数)的 2D 对称矩阵
[[1. 2. 0. 0. 2. 2. 2.]
[2. 1. 2. 0. 0. 2. 2.]
[0. 2. 1. 2. 0. 0. 2.]
[0. 0. 2. 1. 2. 0. 0.]
[2. 0. 0. 2. 1. 2. 0.]
[2. 2. 0. 0. 2. 1. 2.]
[2. 2. 2. 0. 0. 2. 1.]]
我想检查一下:将 M 中的 i,j 项设置为 0,其中 i+1、i+2、i+3 中的 j 在 M 中设置为零
我有这个代码,这样做:
for i in range(len(M)):
for j in range(len(M)):
if M[i, j] != 0:
if j == len(M) - 3:
M[i, j+2] = 0
M[i, j+1] = 0
elif j == len(M) - 2:
M[i, j+1] = 0
elif j == len(M) - 1:
continue
else:
M[i, j + 3] = 0
M[i, j + 2] = 0
M[i, j + 1] = 0
else:
continue
它工作得很好,但我想减少我的 if 语句。我读过M[i,j:j+3]
,但我真的不知道如何使用它。
我正在等待以下输出矩阵:
[[1. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 2.]
[0. 0. 2. 0. 0. 0. 0.]
[2. 0. 0. 0. 1. 0. 0.]
[2. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]]
解决方案
这应该有效:
for i in range(len(M)):
for j in range(len(M)):
if M[i, j] != 0:
M[i, (j+1):(j+4)] = 0
print (M)
输出:
[[1. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 2.]
[0. 0. 2. 0. 0. 0. 0.]
[2. 0. 0. 0. 1. 0. 0.]
[2. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]]
推荐阅读
- azure - 如何使用 ARM 模板部署现有文件很少的 Azure VM?
- mysql - #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册
- .net - ClickOnce 发布以前的应用程序
- c++ - C ++在PATH的所有文件中搜索
- .net - VSTS 代码覆盖新代码
- rest - 使用 POST 获取数据
- jakarta-ee - 注入@Default 服务
- reactjs - WeatherWidget.io 的 React/NextJS 集成
- awk - Windows SED - 将 csv 中的选项卡转换为带双引号的管道
- r - 用混杂变量拟合 R 中的线性回归模型