显然Numpy为其列表提供了特殊的语法。也就是说,我的符号是myarray[:, 4]
。我尝试在Numpy中找到数组的来源,但没有成功。 (我只找到了一些C .h标题和一个编译过的库。)
有关某人如何制作自己的语法的想法吗?
答案 0 :(得分:3)
语法是 Python语言的一部分。 Slicing syntax支持一个或多个切片:
extended_slicing ::= primary "[" slice_list "]" slice_list ::= slice_item ("," slice_item)* [","]
[...]如果切片列表包含至少一个逗号,则该键是包含切片项转换的元组;否则,单个切片项的转换是关键。
Numpy利用了这个功能;您需要做的就是实现object.__getitem__()
special method并处理slice()
个对象的元组。
现在,Numpy项目在要求实现这一目标方面发挥了重要作用;这同样适用于...
语法和Ellipsis
对象的使用,以及numeric method hooks上的限制。
例如,新的dedicated @
and @=
syntax也是Numpy社区特别要求的。所以从本质上讲,如果你有一个引人注目的用例和使用该语言的足够大的社区,你可以提出新的语法,并将其添加到语言中。
答案 1 :(得分:1)
这是一个使用元组伪造多维索引的简短演示:
>>> a={(1,2):'hi', (3,4):'there'}
>>> a[1,2]; a[3,4]
'hi'
'there'
答案 2 :(得分:0)
numpy只使用普通的python语法 - 大概是 - __getitem__
和__setitem__
的智能实现(参见python docs)。
您可以通过实施自己的__getitem__
方法轻松使用此表示法:
class Object(object):
def __getitem__(self, item):
print item
看看它在做什么:
>>> o = Object()
>>> o[:,1:2]
(slice(None, None, None), slice(1, 2, None))