gpt4 book ai didi

python - 将语法切片为对象

转载 作者:行者123 更新时间:2023-11-30 23:37:49 25 4
gpt4 key购买 nike

我有一个保存数据的类(numpy ndarray),其中包含将数据存储到 mat 文件的方法(使用 scipy.io.savemat)。数据可能非常大,所以我可能只想存储一部分数据。因此我传递了一个切片对象,如下所示:

def write_mat(self, fn, fields=None, sel=None):
# (set fields and sel to sensible values if None)
scipy.io.savemat(fn, dict(data=self.data[fields][sel]))

在这里,fields可能是字符串列表(因为 self.data 是结构化数组),并且 sel是一个切片对象。当然,我不能直接将切片语法传递到 write_mat :obj.write_mat(fn, fields, [::10])是一个语法错误。当然可以传入slice(None, None, 10)相反,但我不太喜欢这个解决方案。

是否有任何内置的便利对象可以让我从切片语法创建切片对象?当然,它很容易实现:

In [574]: class Foo:
...: def __getitem__(self, item):
...: return item
...:

In [578]: slicer = Foo()

In [579]: slicer[::100]
Out[579]: slice(None, None, 100)

但即使对于易于实现的东西,也可能已经有一个更标准的解决方案。有没有?按照标准,我的意思是存在于 Python、numpy 或 scipy 内部。

最佳答案

Passing Python slice syntax around to functions 上的答案是正确的,但由于您已经在使用 NumPy,您可以使用 np.s_ :

import numpy as np
np.s_[1:2:3]
Out[1]: slice(1, 2, 3)

关于python - 将语法切片为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com