如何将实例属性链接到numpy数组?

2024-04-29 07:01:05 发布

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

我有一个Python对象的列表,表示几个类。这些类明显不同,但仍然有一些共同的属性(每个对象有不同的值)。例如:

class Super1:
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2
        #Lot's of other stuff

class Sub1(Super1):
    def __init__(self, value1, value2, value3):
        Super1.__init__(self, value1, value2)
        self.value3 = value3
        #Lot's of stuff

class Sub2(Super1):
    def __init__(self, value1, value2, value4):
        Super1.__init__(self, value1, value2)
        self.value4 = value4
        #Lot's of stuff

objects = [Sub1(1.,2.,3.), Sub1(213.,2.,23.), Sub2(23.,10.,0.2), Sub1(3.,2.,12.)]

现在,为了方便和性能,我需要一个包含所有这些值的NumPy数组。我知道我可以这样读:

^{pr2}$

但是我还需要更改数组形式和实例方法中的值。有没有可能通过使用指针或其他东西动态地链接数组中的对象属性和相应的值?在

不,这里的对象不必是列表。欢迎提出建议。在


Tags: of对象selfinitdef数组classlot
2条回答

如果要修改对象的设置属性,请使用属性。在

此解决方案使用数组的索引

class Super(object):

    @property
    def value1(self):
        return self.array1[self.index]

    @value1.setter
    def value1(self, value):
        self.array1[self.index] = value

    def __init__(self, array1, index):
        self.array1 = array
        self.index = index

您需要先创建数组,然后再创建对象。在

这是另一种对对象使用一个数组的解决方案:

^{pr2}$

Numpy数组是"a contiguous one-dimensional segment of computer memory",所以你真的不可能创建一个由内存块组成的Numpy数组。在

唯一的可能是反过来,首先创建数组,然后将数组的单个元素切片分配给对象,例如

class Super1(object):
    def __init__(self, value1):
        self._value1 = value1

    @property
    def value1(self):
        return self._value1[0]

    @value1.setter
    def value1(self, value):
        self._value1[0] = value

现在:

^{pr2}$

相关问题 更多 >