改变输入矩阵的形状(shape),
输入为 matrix, r, c. matrix为输入矩阵,r和c分别为输出矩阵的行和列
如果能转换就输出新的矩阵,如果不能输出就输出原始矩阵
第一种方法,使用numpy:
def matrixReshape(self, nums, r, c):
try:
return np.reshape(nums, (r, c)).tolist() # 将数组或者矩阵转换为列表
except:
return nums
tolist的目的是将输出转换为列表
第二中方法:参考leetcode上面大神
def matrixReshape2(self, nums, r, c):
A = [x for row in nums for x in row]
return [A[i*c:(i+1)*c] for i in range(r)] if r*c == len(A) else nums
A = [x for row in nums for x in row]
将矩阵转换成一个列表,方便后面的访问
[A[i*c:(i+1)*c] for i in range(r)]
根据行来计算,
每一行为一个列表,每一行的起始坐标为i*c, 终点坐标为(i+1)*c, i是由range(r)生成的,也就是新的矩阵有r行.
所有代码:
# 改变matrix的shape,
# 输入 matrix, (r. c) r c分别代表新的matrix的行和列
# 如果能转换则输出新的matrix,否则输出原始matrix
import numpy as np
class Solution(object):
def matrixReshape(self, nums, r, c):
try:
return np.reshape(nums, (r, c)).tolist() # 将数组或者矩阵转换为列表
except:
return nums
def matrixReshape2(self, nums, r, c):
A = [x for row in nums for x in row]
return [A[i*c:(i+1)*c] for i in range(r)] if r*c == len(A) else nums
if __name__ == '__main__':
s = Solution()
# nums = np.array([[1, 2], [3, 4]])
# newNum = s.matrixReshape(nums, 1, 4)
nums = [[1, 2], [3, 4]]
newNum = s.matrixReshape2(nums, 1, 4)
print(newNum)
结果: