为矩阵向量乘法创建 GUI
Creating GUI for matrix vector multiplication
我正在编写一个脚本,使用 Python 的 Tkinter 通过 GUI 执行矩阵向量乘法。我是 TKinter
的新手,我正在努力学习。为此,我编写了以下代码。 generate_data
函数获取一个数字(例如 m
)并创建一个 mxm
矩阵。在 GUI 中,用户应为矩阵输入一个整数,为向量输入一个整数,然后按计算,以便 matvec
函数执行计算。
我想我还没有完全理解某些部分,但在这个阶段我需要一些解释。我的主要挑战是以可在 GUI 中使用的方式插入 generate_data
函数来创建随机矩阵。在代码的末尾,我复制了错误。提前致谢。
import sys
from Tkinter import *
import dotprod
base = Tk()
resultStr = StringVar()
resultStr.set("Enter Matrix1 and Matrix2")
matrixLabel = Label(text = "Enter the size of the matrix:")
matrixLabel.pack()
matrixBox = Entry()
matrixBox.pack()
vectorLabel = Label(text = "Enter the size of the vector:")
vectorLabel.pack()
vectorBox = Entry()
vectorBox.pack()
def generate_data(m):
test_data = []
for i in range(m):
test_data.append([])
for j in range(m):
test_data[i].append(random())
return test_data
def matvec():
m = int(generate_data((matrixBox.get())))
v = [2] * len_m
vec = [0] * len(m)
for i in range(len(m)):
vec[i] = dotprod.dotprod(m[i], v)
resultStr.set("Matrix vector product is " + str(vec))
return vec
Computebutton = Button(text = "Compute", command = matvec)
Computebutton.pack()
base.mainloop()
错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "<stdin>", line 2, in matvec
File "<stdin>", line 3, in generate_data
TypeError: range() integer end argument expected, got str.
你从Entry
字段中得到的是字符串类型,但范围是整数类型。
因此,当您调用 generate_data(matrixBox.get())
时,您将一个字符串传递给 generate_data
.
您可以通过调用 generate_data(int(matrixBox.get()))
或添加 m = int(m)
作为 generate_data
函数的第一行来解决此问题。
我正在编写一个脚本,使用 Python 的 Tkinter 通过 GUI 执行矩阵向量乘法。我是 TKinter
的新手,我正在努力学习。为此,我编写了以下代码。 generate_data
函数获取一个数字(例如 m
)并创建一个 mxm
矩阵。在 GUI 中,用户应为矩阵输入一个整数,为向量输入一个整数,然后按计算,以便 matvec
函数执行计算。
我想我还没有完全理解某些部分,但在这个阶段我需要一些解释。我的主要挑战是以可在 GUI 中使用的方式插入 generate_data
函数来创建随机矩阵。在代码的末尾,我复制了错误。提前致谢。
import sys
from Tkinter import *
import dotprod
base = Tk()
resultStr = StringVar()
resultStr.set("Enter Matrix1 and Matrix2")
matrixLabel = Label(text = "Enter the size of the matrix:")
matrixLabel.pack()
matrixBox = Entry()
matrixBox.pack()
vectorLabel = Label(text = "Enter the size of the vector:")
vectorLabel.pack()
vectorBox = Entry()
vectorBox.pack()
def generate_data(m):
test_data = []
for i in range(m):
test_data.append([])
for j in range(m):
test_data[i].append(random())
return test_data
def matvec():
m = int(generate_data((matrixBox.get())))
v = [2] * len_m
vec = [0] * len(m)
for i in range(len(m)):
vec[i] = dotprod.dotprod(m[i], v)
resultStr.set("Matrix vector product is " + str(vec))
return vec
Computebutton = Button(text = "Compute", command = matvec)
Computebutton.pack()
base.mainloop()
错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "<stdin>", line 2, in matvec
File "<stdin>", line 3, in generate_data
TypeError: range() integer end argument expected, got str.
你从Entry
字段中得到的是字符串类型,但范围是整数类型。
因此,当您调用 generate_data(matrixBox.get())
时,您将一个字符串传递给 generate_data
.
您可以通过调用 generate_data(int(matrixBox.get()))
或添加 m = int(m)
作为 generate_data
函数的第一行来解决此问题。