任意维度reshape

任意维度reshape

原问题:https://leetcode-cn.com/problems/reshape-the-matrix/

import numpy as np
from  collections import Iterable

def flatten(array,fetcher = []):
    if isinstance(array,Iterable):
        for item in array:
            flatten(item,fetcher)
    else:
        fetcher.append(array)
    
    return fetcher

def revital(vector,new_shape):
    if len(new_shape) == 1:
        return vector
    res = []
    each_row = []
    for item in vector:
        each_row.append(item)
        if len(each_row) == new_shape[-1]:
            res.append(each_row)
            each_row = []
    
    return revital(res,new_shape[:-1])


def reshape(array,new_shape):
    old_size = 1
    temp = array
    while isinstance(temp,Iterable):
        old_size *= len(temp)
        temp = temp[0]
    new_size = 1
    for dim in new_shape:
        new_size *= dim
    
    if new_size!=old_size:
        return array
    
    arr_flatten = flatten(array)
    arr_rivital = revital(arr_flatten,new_shape)

    return arr_rivital



if __name__ == '__main__':
    a = np.arange(24).reshape(2,3,4)
    a = a.tolist()
    print(reshape(a,(6,4)))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值