使用Python Turtle图形可视化稀疏矩阵

时间:2018-11-05 15:22:02

标签: python python-3.x sparse-matrix turtle-graphics

我陷入了这个问题。

def showMatrix(turtle_object, sparse_matrix):

showMatrix()函数将使用点网格可视化矩阵内容。每个网格位置将对应一个矩阵位置(行,列)。出现“点”表示条目为非零。

首先,您需要使用以下命令设置显示坐标以匹配矩阵范围 screen.setworldcoordinates()方法。换句话说,显示屏的左下角将 变为坐标(0,0),右上角将为(第1行,第1列)。切换画面 通过匹配“网格”,坐标以这种方式简化了矩阵索引到屏幕坐标的映射 和矩阵坐标。

使用乌龟.goto.dot方法,为每个矩阵绘制一个红点。

这是我到目前为止所做的工作:

def matrix(n, init):
    matrix = []
    for i in range(n):
        row = []
        for j in range(n):
            row.append(init)
        matrix.append(row)
    return matrix



def sparse_matrix(matrix,n,value):
    import random
    ctr = 0
    while ctr < n:
        row = random.randint(0,order(m)-1)
        col = random.randint(0,order(m)-1)
        if matrix[row][col] != value:
            matrix[row][col] = value
            ctr += 1
    return matrix

def showMatrix(turtle_object, sparse_matrix):
    for i in len(m):
        for j in len(m):
            if sparse_matrix[i][j] != 0:
                sparse_matrix[i][j] = turtle_object
    return sparse_matrix

1 个答案:

答案 0 :(得分:3)

  

(行1,列1)问题是什么意思?

这与您神秘的m变量和您未定义的order()函数有关。让我们继续吧。从matrix()函数中可以看到,我们正在处理一个方矩阵,但我们甚至不用假设。在sparse_matrix()函数中,我们可以这样做:

rows = len(sparse_matrix)
columns = len(sparse_matrix[0])

接着检查rows是否为零。

  

如何在乌龟上显示稀疏矩阵?

您的sparse_matrix()函数未正确使用turtle_object -我们不想存储它,我们想让它画东西。而且此函数可能不应返回任何内容。我猜应该看起来像这样:

def showMatrix(turtle_object, sparse_matrix):
    rows = len(sparse_matrix)

    if rows == 0:
        return

    columns = len(sparse_matrix[0])

    turtle_object.penup()

    for r in range(rows):
        for c in range(columns):
            if sparse_matrix[r][c] != 0:
                turtle_object.goto(c, r)
                turtle_object.dot(dot_size, "red")

dot_size现在为1。用一些乌龟代码包装:

from turtle import Screen, Turtle

# ...

m = 6

screen = Screen()

dot_size = 1

yertle = Turtle(visible=False)

mat = matrix(order(m), 0)
sparse_matrix(mat, order(m / 2), 1)

showMatrix(yertle, mat)

screen.mainloop()

我们得到的图形不令人满意:

enter image description here

因为一切都太小,需要扩大规模。

  

我不确定如何使用screen.setworldcoordinates()

我们可以使用乌龟自己的setworldcoordinates()将窗口弯曲到我们的图形限制,而不是直接在我们的图形代码中添加比例因子:

screen.setworldcoordinates(0, 0, order(m), order(m))

dot_size = screen.window_width() / order(m)

这使我们在视觉上更加满意:

enter image description here

我希望这个草图能使您朝正确的方向前进。