Olivia姜元 2023-01-06 14:25 采纳率: 60%
浏览 14
已结题

请修改!面向对象设计案例(矩阵)




```#模拟矩阵预算,支持矩阵转置,修改矩阵大小等
class  simNumpyArray(object):
         def__init__(self,p)
             #  ‘’’可以接受列表、元组、range对象等类型的数据,每个元素必须为数字’’’
if type(p) not in (list,tuple,range):
                print('输入数据类型错误!')
                return
                for item in p:
                 #判断参数类型是否正确,可用系统函数isinstance()
                 #if isinstance(item,(int,float,complex)):
                     if type(item) not in (int ,float,complex):
                      print('数据类型错误')
                      return


self.__data=[list(p)]
self.__row=1
self.__col=len(p)
def__del__(self)
del self.__data
#下面开始规定方法,一种是改变矩阵大小,一种是转置
def reshape(self,size):
       #‘’’size参数给定新矩阵的大小,要求输入必须为列表或者元组,如[row,col]
       #   或者(row,col)。row和col其中一个可以为-1,代表自动计算’’’
        if not isinstance(size ,(list,tuple)) or len(size)!=2:
           print('给定的新矩阵大小输入参数不正确!')
           return


if (not isinstance(size[0], int)) or (not isinstance(size[1], int)):
    print('矩阵大小请输入整数!')
    return
if size[0] != -1 and size[1] != -1 and size[0] * size[1] != self.__row * self.__col:
    print('新矩阵大小不正确!')
    return
    # 当行数或者列数为-1时,应自动计算出另一个参数
if size[0] == -1:
    if size[1] == -1 or (self.__row * self.__col) % size[1] != 0:
        print('新矩阵大小不正确!')
        return
if size[1] == -1:
    if size[0] == -1 or (self.__row * self.__col) % size[0] != 0:
        print('新矩阵大小不正确!')
        return


#将输入矩阵转换为一阶
data=[t for i in self.__data for t in i]
#按照输入大小重新设置矩阵
if size[0]==-1:
         self.__row=int(self.__row*self.__col/size[1])
         self.__col=size[1]
if size[1]==-1:
         self.__col=int(self.__row*self.__col/size[0])
         self.__row=size[0]
else:
         self.__size[0]
         self.__col=size[1]


self.__data=[[data[row* self.__col +col] for col in range(self.__col)]
     for row in range(self.__row)]

@property
def T(self):
           b=simNumpyArray([t for i in self.__data for t in i])
           b.reshape((self.__row,self.__col))
           b.__data=list(map(list,zip(*b.__data)))
           b.__row,b.__col=b.__col,b.__row
           return b



这个代码到处报错。。
初学者 完全搞不懂缩进问题(好像远不止一个错误)
请指点 顺便把还有的错误修改一下 使之可以正常运行

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/650959589276127.png "#left")
  • 写回答

1条回答 默认 最新

  • 於黾 2023-01-06 14:36
    关注
    
     
     
     
    ```#模拟矩阵预算,支持矩阵转置,修改矩阵大小等
    class simNumpyArray(object):
        def __init__(self,p):
            #  ‘’’可以接受列表、元组、range对象等类型的数据,每个元素必须为数字’’’
            if type(p) not in (list,tuple,range):
                print('输入数据类型错误!')
                return
            for item in p:
                #判断参数类型是否正确,可用系统函数isinstance()
                #if isinstance(item,(int,float,complex)):
                if type(item) not in (int ,float,complex):
                    print('数据类型错误')
                    return
     
            self.__data=[list(p)]
            self.__row=1
            self.__col=len(p)
    
        def __del__(self):
            del self.__data
    
        #下面开始规定方法,一种是改变矩阵大小,一种是转置
        def reshape(self,size):
            #‘’’size参数给定新矩阵的大小,要求输入必须为列表或者元组,如[row,col]
            #   或者(row,col)。row和col其中一个可以为-1,代表自动计算’’’
            if not isinstance(size ,(list,tuple)) or len(size)!=2:
                print('给定的新矩阵大小输入参数不正确!')
                return 
     
            if (not isinstance(size[0], int)) or (not isinstance(size[1], int)):
                print('矩阵大小请输入整数!')
                return
    
            if size[0] != -1 and size[1] != -1 and size[0] * size[1] != self.__row * self.__col:
                print('新矩阵大小不正确!')
                return
            # 当行数或者列数为-1时,应自动计算出另一个参数
            if size[0] == -1:
                if size[1] == -1 or (self.__row * self.__col) % size[1] != 0:
                    print('新矩阵大小不正确!')
                    return
            if size[1] == -1:
                if size[0] == -1 or (self.__row * self.__col) % size[0] != 0:
                    print('新矩阵大小不正确!')
                    return
     
     
            #将输入矩阵转换为一阶
            data=[t for i in self.__data for t in i]
            #按照输入大小重新设置矩阵
            if size[0]==-1:
                self.__row=int(self.__row*self.__col/size[1])
                self.__col=size[1]
            if size[1]==-1:
                self.__col=int(self.__row*self.__col/size[0])
                self.__row=size[0]
            else:
                self.__size[0]
                self.__col=size[1]
     
     
            self.__data=[[data[row* self.__col +col] for col in range(self.__col)]
                for row in range(self.__row)]
     
        @property
        def T(self):
            b=simNumpyArray([t for i in self.__data for t in i])
            b.reshape((self.__row,self.__col))
            b.__data=list(map(list,zip(*b.__data)))
            b.__row,b.__col=b.__col,b.__row
            return b
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。