我在一个应用程序中使用python中的图片(2-D数组)和模型(3-D数组)数据的数组,在该应用程序中,我正在对人体进行3维建模。我想用Lisp重写代码,特别是球拍,
但我想知道如何在numpy索引中简洁的表达式,即。arr[2][3]
将用Lisp语言表达。我可以编写一个递归函数来扩展到(car (car ... (car list))))
或(cdr (cdr ... (cdr list))))
,但这似乎效率很低。有没有办法在Lisp列表、向量或数组中获取O(1)
访问时间?
即。
arr[1,2] = 1
球拍中应该怎么做?
发布于 2018-07-12 06:24:47
使用Arrays而不是(链接)列表的全部意义在于,您可以在固定时间内对它们进行随机访问索引。但是球拍数组提供了更多的功能,包括Python式的切片和NumPy式的数组操作。它的语法不像Python那样简洁或者(至少在我看来)那么好,但是它们的思想是一样的。
你真的需要阅读整章来理解写代码的最佳方式,否则你最终会做同样的事情,就像你写的Python代码使用了NumPy,然后一直在range(len(arr))
上循环。
但是为了直接回答你的问题,Python/NumPy表达式:
arr[2, 3]
…在球拍中写成:
(array-ref arr #(2, 3))
Python表达式:
arr[2][3]
…被写成两个嵌套的array-ref
调用。但是,如果arr
是一个实际的2D数组(例如,来自NumPy),那么您不应该在Python语言中将其编写为两个索引表达式,就像在球拍中一样,所以它更冗长这一事实并不是一件坏事。
无论哪种方式,它都有相同的常量时间查找。
发布于 2018-07-12 06:23:56
https://stackoverflow.com/questions/51294880
复制相似问题