首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >球拍: O(1)数组索引,像python的numpy?

球拍: O(1)数组索引,像python的numpy?
EN

Stack Overflow用户
提问于 2018-07-12 06:13:30
回答 2查看 288关注 0票数 0

我在一个应用程序中使用python中的图片(2-D数组)和模型(3-D数组)数据的数组,在该应用程序中,我正在对人体进行3维建模。我想用Lisp重写代码,特别是球拍,

但我想知道如何在numpy索引中简洁的表达式,即。arr[2][3]将用Lisp语言表达。我可以编写一个递归函数来扩展到(car (car ... (car list))))(cdr (cdr ... (cdr list)))),但这似乎效率很低。有没有办法在Lisp列表、向量或数组中获取O(1)访问时间?

即。

代码语言:javascript
复制
arr[1,2] = 1

球拍中应该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 06:24:47

使用Arrays而不是(链接)列表的全部意义在于,您可以在固定时间内对它们进行随机访问索引。但是球拍数组提供了更多的功能,包括Python式的切片和NumPy式的数组操作。它的语法不像Python那样简洁或者(至少在我看来)那么好,但是它们的思想是一样的。

你真的需要阅读整章来理解写代码的最佳方式,否则你最终会做同样的事情,就像你写的Python代码使用了NumPy,然后一直在range(len(arr))上循环。

但是为了直接回答你的问题,Python/NumPy表达式:

代码语言:javascript
复制
arr[2, 3]

…在球拍中写成:

代码语言:javascript
复制
(array-ref arr #(2, 3))

Python表达式:

代码语言:javascript
复制
arr[2][3]

…被写成两个嵌套的array-ref调用。但是,如果arr是一个实际的2D数组(例如,来自NumPy),那么您不应该在Python语言中将其编写为两个索引表达式,就像在球拍中一样,所以它更冗长这一事实并不是一件坏事。

无论哪种方式,它都有相同的常量时间查找。

票数 2
EN

Stack Overflow用户

发布于 2018-07-12 06:23:56

编辑:查看已接受的答案

对于香草列表,您可以这样做

代码语言:javascript
复制
(list-tail lst pos)

另请参阅:https://docs.racket-lang.org/reference/pairs.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51294880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档