2024-05-19 02:20:34 发布
网友
Numpy arrays can be efficiently subclassed,但我想修改__getitem__和{}的行为,以便它们可以接受日期时间范围,同时保留最大数量的内置机制,如操作、累计数等。这可以用__array_ufunc__完成吗?在
__getitem__
__array_ufunc__
似乎在他们的example中,^{}方法被重写。在
这可以用来修改numpy数组的get/set行为吗?在
您可以实现__getitem__和__setitem__来处理您的特定情况(使用datetime对象),在其他情况下可以分派到super().__{get|set}item__。这样,ndarray的剩余功能仍然保留。例如:
__setitem__
super().__{get|set}item__
ndarray
from datetime import date import numpy as np class A(np.ndarray): def __array_finalize__(self, obj): if obj is not None: obj.start_date = date.today() def __getitem__(self, item): if isinstance(item, slice) and isinstance(item.start, date) and isinstance(item.stop, date): return super().__getitem__(slice((item.start - self.start_date).days, (item.stop - self.start_date).days, item.step)) return super().__getitem__(item) a = A((10,), buffer=np.arange(10), dtype=int) print(a[1:8]) print(a[date(2019, 1, 22):date(2019, 1, 29):2]) print(np.cumsum(a)) print(np.add.outer(a, a))
哪些输出:
您可以实现
__getitem__
和__setitem__
来处理您的特定情况(使用datetime对象),在其他情况下可以分派到super().__{get|set}item__
。这样,ndarray
的剩余功能仍然保留。例如:哪些输出:
^{pr2}$相关问题 更多 >
编程相关推荐