gpt4 book ai didi

python - numpy python 类调用错误的 __setitem__

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:43 24 4
gpt4 key购买 nike

我有以下类(class):

class autoArray2(numpy.ndarray):
def __new__(self, *args, **kwargs):
obj = numpy.array(*args, **kwargs)
return(obj)

def __setitem__(self, coords, value):
print("HERE")

但是似乎调用的是 array.__setitem__ 而不是我指定的那个。

a = numpy.array([[1,2],[2,3]])
b = autoArray2(a)
a[0,0] = 1

没有打印“HERE”。

最佳答案

子类化 numpy 数组有点棘手。 Stefan van der Walt's slidesnumpy docs如果你想继承,是很好的起点。

import numpy as np

class AutoArray2(np.ndarray):
def __new__(cls, input_array):
# Input array is an already formed ndarray instance
# We first cast to be our class type
obj = np.asarray(input_array).view(cls)
return obj
def __array_finalize__(self, obj):
if obj is None: return
def __setitem__(self, coords, value):
print("HERE")

a = np.array([[1,2],[2,3]])
b = AutoArray2(a)
b[0,0] = 1

产量

HERE

关键要素是调用view(cls)。没有它,您将返回一个普通的 ndarray,而不是 AutoArray2 实例。

此外,a[0,0] = 1 使用的是 a —— 普通的 ndarray。要使用 b__setitem__,您需要 b[0,0] = 1

关于python - numpy python 类调用错误的 __setitem__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699228/

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