在Python中替换给定k的矩阵的所有子对角线
我想替换k-对角线下的所有次对角线值 例如:在Python中替换给定k的矩阵的所有子对角线,python,arrays,list,matrix,diagonal,Python,Arrays,List,Matrix,Diagonal,我想替换k-对角线下的所有次对角线值 例如: In [17]: lowerdiags = [np.diag(matrix, k=e+1).tolist() for e in range(-len(matrix), k)] In [18]: print(lowerdiags) Out[19]: [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]] 我们首先导入numpy库: import numpy
In [17]: lowerdiags = [np.diag(matrix, k=e+1).tolist() for e in range(-len(matrix), k)]
In [18]: print(lowerdiags)
Out[19]: [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
我们首先导入numpy库:
import numpy as np
然后我们创建矩阵:
In [14]: matrix = np.matrix('1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1')
然后我们得到:
In [15]: print(matrix)
Out[16]:
[[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]]
然后我们得到k=1时k-对角线下的对角线,例如:
In [17]: lowerdiags = [np.diag(matrix, k=e+1).tolist() for e in range(-len(matrix), k)]
In [18]: print(lowerdiags)
Out[19]: [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
我被困在这里,我应该为k=1添加什么,并替换每0的所有值,就像这样:(知道我们刚刚找到了子对角线)
甚至对于k=0:
[[1 1 1 1 1 1]
[0 1 1 1 1 1]
[0 0 1 1 1 1]
[0 0 0 1 1 1]
[0 0 0 0 1 1]]
感谢您的帮助和耐心。我找到了一种方法,使用numpy方法:填充对角线,并在不同的k:
# Import numpy library
import numpy as np
def Exercise_3(matrix, k):
# print initial matrix
print(matrix)
for k in range(-len(matrix)+1, k):
if k < 0:
# Smart slicing when filling diagonals with "np.fill_diagonal" on our matrix for lower diagonals
np.fill_diagonal(matrix[-k:, :k], 0)
if k > 0:
# Smart slicing when filling diagonals with "np.fill_diagonal" on our matrix for upper diagonals
np.fill_diagonal(matrix[:-k, k:], 0)
if k == 0:
# Just replace the main diagonal by 0
np.fill_diagonal(matrix, 0)
# print to see each change on the matrix
#print(matrix)
#print(k)
return matrix
def main():
k = 0
# an another way of creating a matrix
#matrix = np.matrix('1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1')
# matrix of 5 rows and 5 columns filled by 1
matrix = np.array(([1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]))
NewMatrix = Exercise_3(matrix, k)
print(NewMatrix)
main()
#导入numpy库
将numpy作为np导入
def练习3(矩阵,k):
#打印初始矩阵
打印(矩阵)
对于范围内的k(-len(矩阵)+1,k):
如果k<0:
#在我们的下对角线矩阵上用“np.fill_diagonal”填充对角线时进行智能切片
np.fill_对角线(矩阵[-k:,:k],0)
如果k>0:
#在上对角线矩阵上用“np.fill_diagonal”填充对角线时进行智能切片
np.fill_对角线(矩阵[:-k,k:],0)
如果k==0:
#只需将主对角线替换为0
np.填充_对角线(矩阵,0)
#打印以查看矩阵上的每个更改
#打印(矩阵)
#印刷品(k)
返回矩阵
def main():
k=0
#创建矩阵的另一种方法
#矩阵=np.矩阵('11;11;11;11;11;11;11;11;11;11;11;11;11;11;11')
#由5行5列组成的矩阵,由1填充
矩阵=np.数组([1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1],[1,1,1,1]))
NewMatrix=练习3(矩阵,k)
打印(新矩阵)
main()