龙空技术网

打基础之LeetCode算法题第40日:如何改变矩阵的维数?

吾是我师 280

前言:

此刻姐妹们对“python矩阵元素赋值”大概比较关切,朋友们都想要分析一些“python矩阵元素赋值”的相关知识。那么小编同时在网络上收集了一些有关“python矩阵元素赋值””的相关内容,希望你们能喜欢,姐妹们一起来学习一下吧!

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言和Python,本来考虑Java,但是篇幅有限,有兴趣的朋友自己试试

LeetCode 566. 改变矩阵的维数(Reshape the Matrix)

问题描述:

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。

给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。

如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

注:

给定矩阵的宽和高范围在 [1, 100]。给定的 r 和 c 都是正数。示例:C语言实现:

矩阵能重新调整形状,那么新的矩阵必须刚好可以容纳原矩阵的所有元素。也就意味着,新旧矩阵的行和列的乘积必须相等。

按照题目的意思,如果不能调整,那么返回原矩阵。

代码如下:

代码26~27行,如果矩阵可以调整,开始做调整操作。行列的乘积等于对矩阵元素按顺序形成新的下标。然后让其和新旧列数相除得到的就是新旧矩阵的行下标。

让其和新旧列数取余得到的就是新旧矩阵的的列下标。

获得新旧矩阵的相应行列下标,就可以完成新旧矩阵的赋值。

python语言的实现:

python的实现可以先通过列表表达式直接将矩阵转换成一个一维的数组。然后用切片平均切分成r行就完成了。

代码如下:

标签: #python矩阵元素赋值