python - 如何在python中使用for循环转换单位矩阵
问题描述
所以,假设我有一个单位矩阵 AB,我想把对角线的变成 5,把对角线的直接变成 8s
AB=np.identity(5)
AB
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
row=AB.shape[0]
col=AB.shape[1]
new = AB
for i in range (0,row):
for j in range (0,col):
if AB[i,j] !=0:
new[i,j] = 5
## if j+1 == 0:
## new[i,j+1] = 8
print(new)
[[5. 0. 0. 0. 0.]
[0. 5. 0. 0. 0.]
[0. 0. 5. 0. 0.]
[0. 0. 0. 5. 0.]
[0. 0. 0. 0. 5.]]
使用上面的代码,我可以将 1 更改为 5,但我无法弄清楚如何将主对角线两侧的第一个对角线更改为 8
解决方案
您可以使用以下条件:
if abs(i-j)==1: new[i,j] = 8
或者,您可以直接使用值构建数组:
import numpy as np
N = 5
AB = np.array(([5,8,*[0]*(N-2),8]*N)[:N*N]).reshape((N,N))
print(AB)
[[5 8 0 0 0]
[8 5 8 0 0]
[0 8 5 8 0]
[0 0 8 5 8]
[0 0 0 8 5]]
另一种选择是使用范围分配:
import numpy as np
N = 5
AB=np.identity(N)*5
AB[range(N-1),range(1,N)]=8
AB[range(1,N),range(N-1)]=8
print(AB)
[[5. 8. 0. 0. 0.]
[8. 5. 8. 0. 0.]
[0. 8. 5. 8. 0.]
[0. 0. 8. 5. 8.]
[0. 0. 0. 8. 5.]]
推荐阅读
- javascript - 我的 Vuex 表单获得了第一个字段,但没有获得第二个字段,静默失败
- sql - 如何在 SQL 中应用带有问号符号的 liquibase 变更集
- oop - 如果正则表达式是方法,它们对应于哪个类?
- nginx - nginx 431 请求标头字段太大
- django - 我没有看到任何语法错误,但我不断收到 ModelForm has no model class specified
- python - 如何修复 TypeError:“类型”对象不可下标
- html - 我的图像从我的 div 列中流出。我如何修复它并使图像全尺寸变成 div
- postgresql - 如何将用户输入与模棱两可的城市名称相匹配?
- google-api - 在 File.get 中使用 * 作为文件 ID 来获取所有文件。导致错误
- javascript - 向下滚动时水平显示图像