时间:2021-05-22
如下所示:
Description:将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)Example:Input:[[1,2,3,4],[5,1,2,3],[9,5,1,2]]Output:[[4],[3, 3],[2, 2, 2],[1, 1, 1],[5, 5],[9]]思路:考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j从col-1开始遍历,首先考虑j的变化,若j变为0,则保持不变,让i变化。在确定开头元素后,可通过设置i+1,j+1及不超过范围来向lst中对角线上添加元素。
对于以上例子,各对角线开头元素的index分别为:
(0,3)(0,2)(0,1)(0,0)(1,0)(2,0)其中各lst中的元素index分别为:
[(0,3)][(0,2),(1,3)][(0,1),(1,2),(2,3)][(0,0),(1,1),(2,2)][(1,0),(2,1)][(2,0)]代码:
def diagonal_right(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) col2 = col result = [] for i in range(row): for j in range(col2 - 1, -1, -1): #j倒序遍历 lst = [] i1,j1 = i,j #i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择 while i1 <= row - 1 and j1 <= col - 1: lst.append(matrix[i1][j1]) j1 += 1 i1 += 1 result.append(lst) if i == 0 and j == 0:#当遍历完(0,0)开头的一条对角线后,让j固定为0 col2 = 1 return('the result is: %s'%result,'end') #testprint(diagonal_right([[1],[2]]))print(diagonal_right([[1]]))print(diagonal_right([ [1,2,3,4], [5,1,2,3], [9,5,1,2]]))输出:
变型: 由(0,0)开始向左打印:
思路:同样考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j也从0开始遍历,首先考虑j的变化,若j变为col-1,则保持不变,让i变化。在找到开头元素后,可通过设置i+1,j-1及不超过范围来向lst中对角线上添加元素。
对于以上例子,各对角线开头元素的index分别为:
(0,0)(0,1)(0,2)(0,3)(1,3)(2,3)其中各lst中的元素index分别为:
[(0,0)][(0,1),(1,0)][(0,2),(1,1),(2,0)][(0,3),(1,2),(2,1)][(1,3),(2,2)][(2,3)]代码:
def diagonal_left(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) k=0 result = [] for i in range(row): for j in range(k,col): # j顺序遍历 lst = [] i1, j1 = i, j # i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择 while i1 <= row - 1 and j1 >=0: lst.append(matrix[i1][j1]) j1 -= 1 i1 += 1 if i==0 and j==col-1: k=col-1 result.append(lst) return ('the result is: %s' % result, 'end')# testprint(diagonal_left([[1],[2]]))print(diagonal_left([[1]]))print(diagonal_left([ [1,2,3,4], [5,1,2,3], [9,5,1,2]]))输出:
此问题还可以有多种变型,若从左下角,右下角按对角线打印等,只需要进行简单的修改即可实现。
以上这篇python 实现矩阵按对角线打印就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
任务描述对一个方阵矩阵,实现平行于主对角线方向的对角线元素遍历。从矩阵索引入手:[[12345][678910][1112131415][1617181920]
反向单位矩阵单位矩阵即对角线为1,如下:​那么反向的单位矩阵就是反对角线为1:​左右镜像操作这里采用numpy实现。方案1importn
Pytorch的线性函数主要封装了Blas和Lapack,其用法和接口都与之类似。常用的线性函数如下:函数功能trace对角线元素之和(矩阵的迹)diag对角线
本文实例讲述了python计算对角线有理函数插值的方法。分享给大家供大家参考。具体实现方法如下:'''p=rational(xData,yData,x)Eval
共轭梯度法,特征值聚堆情况下迭代次数讨论输入各种特征值聚堆与分散时的矩阵,并应用共轭梯度法,观察迭代次数与聚堆情况的关系。因为对角矩阵的对角线元素为其特征值,则