Python矩阵代码报ImportError:无法从array模块导入Array2D
报错原因
- Python标准库自带的
array模块仅提供一维数组实现,没有内置Array2D类,你当前的导入语句from array import Array2D属于对标准库的错误调用。 - 你的代码依赖自定义实现的
Array2D二维数组类,但你未提前实现该类,也没有将对应的实现文件放在Python的模块检索路径下,导致导入失败。
修复方案
推荐使用方案一,无需修改现有Matrix类的业务逻辑:
方案一:添加适配的Array2D自定义实现
将你代码开头的from array import Array2D替换为以下Array2D类的实现代码即可:
class Array2D: def __init__(self, numRows, numCols): self._row_cnt = numRows self._col_cnt = numCols # 初始化二维列表存储数据 self._data = [[0]*numCols for _ in range(numRows)] def numRows(self): return self._row_cnt def numCols(self): return self._col_cnt def clear(self, value): # 所有元素重置为指定value for row in self._data: for i in range(len(row)): row[i] = value def __getitem__(self, idx_tuple): r, c = idx_tuple return self._data[r][c] def __setitem__(self, idx_tuple, value): r, c = idx_tuple self._data[r][c] = value
方案二:直接重构Matrix类移除Array2D依赖
如果你不想单独维护Array2D类,可以直接修改Matrix的底层实现为嵌套列表,修改__init__、numRows、numCols、__getitem__、__setitem__方法即可,其余逻辑无需变动。
额外代码优化提示
你现有代码存在几处笔误,可按需修正:
scaleBy方法的注释说明是缩放,但代码写的是self[r, c] += scalar,应为self[r, c] *= scalar- 矩阵乘法
__mul__方法的断言错误提示写的是add operation,应为matrix multiply operation - 矩阵减法
__sub__方法的断言错误提示同样写的是add operation,可同步修改为subtract operation
内容的提问来源于stack exchange,提问作者Game mode
相关产品推荐
相关产品推荐

