我想创建这个矩阵:
[[ 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 1. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 1. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 1. 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 1. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 1. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 1. 1.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 1.]]
我可以通过
轻松获得单位矩阵import numpy as np
matrix = np.eye((10))
答案 0 :(得分:1)
您可以使用k
eye
参数来设置对角线的索引:
>>> m1= np.eye((10))
>>> m2= np.eye((10),k=1)
>>> m3 = np.eye((10),k=-1)
>>> m1+m2+m3
array([[ 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 1., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 1., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.]])
或者:
>>> np.triu(np.tril(np.ones((10,10)),k=1),k=-1)
array([[ 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 1., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 1., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.]])
答案 1 :(得分:0)
自己敲门
n = 10
[[1. if (row == 0 and col in (0, 1)) or
(row == n-1 and col in (n-2, n-1)) or
(row not in (0, n-1) and col in (row-1, row, row+1))
else 0. for col in range(n)] for row in range(n)]
答案 2 :(得分:0)
使用标准的python库元素,问题可以解决如下:
迭代矩阵(子列表列表)。
将右侧和左侧的元素翻转为1。
表示矩阵中的行:
if row == matrix[0]:
row[1]=1
elif row == matrix[len(matrix)-1]:
row[len(row)-2] = 1
else:
p= row.index(1)
row[p-1], row[p+1] = 1,1