正在更改Numpy array子类中的“getitem”和“setitem”的行为

2024-05-19 02:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

Numpy arrays can be efficiently subclassed,但我想修改__getitem__和{}的行为,以便它们可以接受日期时间范围,同时保留最大数量的内置机制,如操作、累计数等。这可以用__array_ufunc__完成吗?在

似乎在他们的example中,^{}方法被重写。在

这可以用来修改numpy数组的get/set行为吗?在


Tags: numpy数量example时间bearraycan内置
1条回答
网友
1楼 · 发布于 2024-05-19 02:20:34

您可以实现__getitem____setitem__来处理您的特定情况(使用datetime对象),在其他情况下可以分派到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))

哪些输出:

^{pr2}$

相关问题 更多 >

    热门问题