【问题标题】:function for rotating matrix returns the input旋转矩阵的函数返回输入
【发布时间】:2021-08-09 16:41:23
【问题描述】:

我试图回答this video 的面试问题作为 Python 编程练习,我决定使用 Nick 解释的第一种方法,但由于某种原因,我的函数总是返回与输入相同的矩阵,我真的很难找到错误

我写的函数是:

def swap(inp):
    for i in range(len(inp)-1):
        for j in range(len(inp[i])-1):
            temp = inp[i][j]
            inp[i][j] = inp[j][i]
            inp[j][i] = temp
    return inp

【问题讨论】:

  • return [list(sorted(i,reverse=True)) for i in zip(*inp)]?
  • @Sujay 看起来既不像对错误的解释,也不像一个可行的解决方案。
  • 请将我们需要的所有信息添加到您的问题中。 inp 是如何定义的?你如何调用你的函数?结果应该如何?
  • 我不希望帖子太长,因为我已经包含了视频,该视频深入解释了我要解决的练习以及函数的输入和输出应该如何@Matthias

标签: python algorithm matrix


【解决方案1】:

我不打算观看整个视频,但我四处点击并看到看起来与您的非常相似的“步骤 1”c++ 代码。我假设您正在尝试复制它。

首先,不确定你想要那些 -1 是什么。如果您这样做,您将保留最后一行和最后一列。 其次,您从 j=0 开始内部循环,但在视频中它从 j=i 开始。

您的函数进行了这些修改:

def swap(inp):
for i in range(len(inp)):
    for j in range(i, len(inp[i])):
        temp = inp[i][j]
        inp[i][j] = inp[j][i]
        inp[j][i] = temp
return inp

如果你只给range一个参数,它假设从0开始。如果你给它两个参数,它是从第一个参数到第二个参数,在这种情况下从ilen(inp[i])

编辑:顺便说一下,这是一个利用 numpy 函数实现相同结果的解决方案。快速浏览一下,我认为转置输入 (inp.T) 对应于第 1 步,np.flip(..., 1) 是水平翻转。

def swap_numpy_style(inp):
    return np.flip(inp.T, 1)

【讨论】:

  • 我放了 len(inp)-1 因为列表的最后一个索引比列表的实际长度低一个所以我想如果我不这样做 j 会变成一个索引的范围。另外,如果每个内部列表都从 0 变为 len(inp[i]-1) ,我也不明白为什么 j 应该从 i 开始。您提供的代码实际上有点工作,但它对角翻转矩阵而不是旋转它,这是我试图获得的目标。感谢您的帮助,我正在努力了解更多信息,但我真的很难看到问题所在
  • “因为列表的最后一个索引比列表的实际长度低一个” - range 函数会处理这个问题。 “但它对角翻转矩阵而不是旋转它” - 好吧,我修复了您的代码应该执行的部分解决方案:对角翻转,如视频中所述。为了实现旋转,它需要水平翻转,如视频中所述并在我的 numpy 解决方案中完成。
  • 哦,我现在明白了。感谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2019-02-08
相关资源
最近更新 更多