【发布时间】:2015-12-25 06:17:59
【问题描述】:
我正在为我的线性代数类创建一个包含向量和矩阵类的程序,但我无法将我的矩阵类字符串化以打印它。导致问题的原因是一个 if 语句,如果它不是一行中的最后一个条目,它会在矩阵中的条目之后添加一个逗号。对此感到好奇的是,我已将问题隔离到我的程序部分,该部分将变量分配给手头条目的索引,但是当我在之后添加一行时打印该变量以尝试找出发生了什么,运行程序打印变量,然后从之前的行给出错误。代码如下:
import copy
class vector:
def __init__(self, entries):
if type(entries) == list:
self.elements = []
self.dimensionality = len(entries)
for entry in entries:
self.elements.append(entry)
if type(entries) == vector:
self.elements = entries.elements
def __str__(self):
buff = "("
for e in self.elements:
buff += str(e)
if self.elements.index(e) < len(self.elements) - 1:
buff += ", "
buff += ")"
return buff
def __getitem__(self,index):
return self.elements[index]
def __len__(self):
return len(self.elements)
def __mul__(self, otherVector):
if self.dimensionality != otherVector.dimensionality:
raise RuntimeError("Cannot multiply vectors of different dimensions")
else:
product = 0
for e in self.elements:
product += e * otherVector.elements[self.elements.index(e)]
return product
def __eq__(self, otherVariable):
return size(self) == size(otherVariable)
def size(x):
return (x * x)**(1/2)
class matrix:
def __init__(self, entries):
for i in entries:
if len(entries[0]) != len(i):
raise RuntimeError("All rows of matrix must contain the same number of entries")
self.elements = []
for row in entries:
self.elements.append(vector(row))
def __str__(self):
buff = "("
for row in self.elements:
buff += str(row)
a = self.elements.index(row) #this is the line that prompts the error
b = len(self.elements) - 1
print (a) #but this line executes before the error cuts off the rest of the program
print(b)
print(a<b)
if a < b :
buff += ", "
buff += ")"
return buff
print(matrix([[1,2],[2,3]]))
这是它给我的错误:
Traceback (most recent call last):
File "/Users/sebpole/Documents/vectors.py", line 127, in <module>
print(matrix([[1,2],[2,3]]))
File "/Users/sebpole/Documents/vectors.py", line 83, in __str__
a = self.elements.index(row)
File "/Users/sebpole/Documents/vectors.py", line 38, in __eq__
return size(self) == size(otherVariable)
NameError: name 'size' is not defined
我通过跳过函数“size()”的定义并将其写入向量相等的定义来修复该特定错误。由于它很短,这不是问题,并且在调整后程序运行良好,但我有以下两个概念性问题: 1)在错误执行之前执行错误之后的行是怎么回事? 2)究竟是什么问题?为什么程序在调用我稍后定义的函数时出现问题?为什么取矩阵的一行的索引称为该行(向量)的相等定义?
【问题讨论】:
标签: class python-3.x linear-algebra theory