【题目】:实现矩阵reshape操作,当reshape满足数组维度时返回结果,否则返回原数组即可。
【示例】:
Input: nums = [[1,2],[3,4]], r = 1, c = 4
Output: [[1,2,3,4]]
Input: nums = [[1,2], [3,4]],r = 2, c = 4
Output: [[1,2], [3,4]]
【解法1】:看到这个题第一反应应该是想到numpy里面的reshape(),先不去考虑里面的逻辑,先解出来再说。
import numpy as np
class Solution(object):
def matrixReshpe(self, num, r, c):
try:
return np.reshape(num, (r, c)).tolist()
except:
return nums【解法2】:
1)要想判断是否满足reshape条件,只需要判断数组元素个数与要reshape的两个维度的乘积是否相等即可。
2)元素位置对应的关系 :如果将矩阵横向展开为一维数组,元素个数为n=origin_r * origin_c
在元素在一维数组中对应的位置i: 原矩阵位置[i/origin_c,i%origin_c] ,新矩阵位置[i/c,i%c] ,对于新矩阵位置[i,j]对应于一维矩阵[i*c,j]。
def matrixReshape(self, nums ,r ,c):
origin_r= len(nums) #行
origin_c=len(nums[0]) #列
if origin_c*origin_r == r*c :
temp=[num for row in nums for num in row] #展开成一维list
newMatrix = [[0 for j in xrange(c) ] for i in xrange(r) ] #xrange为可迭代对象;先创建新的零矩阵,再赋值
for i in xrange(r) :
for j in xrange(c):
newMatrix[i][j]=temp[i*c+j]
return newMarix
else: #无法reshape
return nums
矩阵重塑方法详解
本文介绍两种实现矩阵重塑的方法。一种是使用numpy库的reshape函数直接完成重塑操作;另一种是通过手动计算元素位置来实现重塑,适用于理解重塑背后的逻辑。
321

被折叠的 条评论
为什么被折叠?



