代码之家  ›  专栏  ›  技术社区  ›  Nathan majicvr.com

球拍:相当于np.zeros((n,m))

  •  1
  • Nathan majicvr.com  · 技术社区  · 8 年前

    我不明白我在这里做错了什么。可能是一个错误的反向引用。

    球拍代码:

    (require math/array)
    (define mask_cube
      (let ([leng 5])
        `(make-array #(,leng ,leng) 0)))
    

    我希望它做什么,用python编写:

    np.zeros((5,5))
    

    为什么逗号不能像我想的那样工作?如果有更优雅的方法来解决这个问题,请告诉我。大多数时候我只想要我漂亮的,矮的 np.zeros() 功能

    此外,如果我对反向引用、逗号或球拍(甚至是口齿不清)有一些基本的误解,请告诉我。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Alexis King    8 年前

    你不想 eval 在这里。相反,你引用的太多了;解决问题的简单方法是移动 ` 向内到适当的地方:

    (define mask_cube
      (let ([leng 5])
        (make-array `#(,leng ,leng) 0)))
    

    不过,如果你是初学者,我一般会避免引用;这比需要的要复杂得多。只需使用 vector 相反,函数更容易理解:

    (define mask_cube
      (let ([leng 5])
        (make-array (vector leng leng) 0)))
    

    关于引文的深入处理(结尾是准液体化),请参见 What is the difference between quote and list? 是的。

        2
  •  -1
  •   Nathan majicvr.com    8 年前

    哇,我觉得自己傻吗。它总是一样的:被评估的东西和仅仅是一个符号列表的东西。答案(参见 eval )以下内容:

    (define mask_cube
      (let ([leng 5])
        (eval
          `(make-array #(,leng ,leng) 0))))
    

    仍然对其他用更好的样式编码的答案开放,我希望将其修改为一个函数/宏 np.zeros() np.ones() 口齿不清