小编Dam*_*ien的帖子

Python 惰性求值 numpy ndarray

我有一个大的 2D 数组,我想声明一次,并且偶尔只根据参数更改一些值,而不遍历整个数组。

为了构建这个数组,我已经将 numpy ndarray 类子类化dtype=object并分配给我想要更改函数的元素,例如:

def f(parameter):
     return parameter**2

for i in range(np.shape(A)[0]):
    A[i,i]=f
    for j in range(np.shape(A)[0]):
        A[i,j]=1.
Run Code Online (Sandbox Code Playgroud)

然后我重写了该__getitem__方法,以便它返回具有给定参数的函数的评估(如果它是可调用的),否则返回值本身。

    def __getitem__(self, key):
        value = super(numpy.ndarray, self).__getitem__(key)
        if callable(value):
            return value(*self.args)
        else:
            return value
Run Code Online (Sandbox Code Playgroud)

哪里self.args以前给了 myclass 的实例。

但是,我需要在最后使用浮点数组,我不能简单地将此数组转换为dtype=float使用此技术的数组。我还尝试使用 numpy 视图,这对dtype=object.

你有更好的选择吗?我应该覆盖 view 方法而不是 getitem 吗?

编辑我将来可能不得不使用 Cython,所以如果你有一个涉及 C 指针的解决方案,我很感兴趣。

python arrays numpy lazy-evaluation multidimensional-array

5
推荐指数
1
解决办法
3850
查看次数