gpt4 book ai didi

python - numba jitclass - 属性 a.x 是 a.x 返回 False

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

尝试检查两个 jitclass 实例属性的身份,与普通的 python 类相比,我发现了这种奇怪的行为。 Numba jitclass 在其自身的实例属性身份检查中返回 False,普通 python 类按预期工作。

import numba

class MyClass(object):
def __init__(self, x):
self.x = x

spec = [('x', numba.double)]
@numba.jitclass(spec)
class MyJitClass(object):
def __init__(self, x):
self.x = x

a = MyClass(1)
b = MyJitClass(1)

现在检查身份:

>>> a.x is a.x
True
>>> b.x is b.x
False

知道为什么会这样吗?我应该如何检查两个 jitclass 属性是否引用同一个对象?

最佳答案

让我从引用 jitclass documentation 开始:

The data of a jitclass instance is allocated on the heap as a C-compatible structure so that any compiled functions can have direct access to the underlying data, bypassing the interpreter.

这意味着 Python 解释器不能直接访问类的数据(在本例中为 x)。但是,解决此问题的透明解决方案是使用 properties . Numba 似乎采用了这种方法。

每次访问 b.x 时,都会调用一个函数,该函数返回一个包含 x 值的 Python 对象。该类不存储对象,因此每次访问 x 都会返回一个新对象。通过调用 id(b.x) 验证这一点 - 它每次都会返回不同的 ID。

我们可以模拟 jit 类的行为:

class MyClass(object):
def __init__(self, x):
self._x = x

@property
def x(self):
return float(self._x)

And how I should check whether two jitclass attributes reference to the same object?

嗯,他们没有。 jitclass 属性不存储对象,只存储数据。

关于python - numba jitclass - 属性 a.x 是 a.x 返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528207/

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