【问题标题】:Adding arbitrary extra attribute to numpy.ndarray向 numpy.ndarray 添加任意额外属性
【发布时间】:2021-06-19 00:10:19
【问题描述】:

对于一个“普通”的 Python 类,我习惯于任意添加额外的属性。例如,我可以执行以下操作:

# Create a class
class MyClass: pass

# Create an object of this class
my_object = MyClass()

# Add any attribute I want
my_object.my_new_attribute = "Hello world!"

# Now it has this attribute and I can use it:
print(my_object.my_new_attribute)

这运行没有错误并打印Hello world!

但是,我似乎无法使用numpy.ndarray 这样做。考虑以下几点:

# Create an object of the ndarray class:
import numpy as np

my_object = np.array([1,2,3])

# Verify it is indeed of the `numpy.ndarray` type:
print(type(my_object))

# Add a new atribute
my_object.my_new_attribute = "Hello world!"

这会输出<class 'numpy.ndarray'>,验证我们确实有某个类的对象,但是当尝试添加新属性时,我们得到一个错误:AttributeError: 'numpy.ndarray' object has no attribute 'my_new_attribute'

这是为什么?我理解错误,因为numpy.ndarray 确实没有这样的属性,但MyClass 在第一个示例中也没有,这并没有阻止我添加它。

【问题讨论】:

  • vars(MyClass()) 给出{}vars(np.array([1,2,3])) 给出一个错误,关于缺少 __dict__ 属性。 ndarray 在编译后的代码中使用自定义 __new__ 定义。它没有可以保存用户定义属性的__dict__。列表有问题 - 没有 __dict__

标签: python numpy python-class


【解决方案1】:

需要继承np.ndarray对象,通过__new__方法添加属性。 adding an extra attribute to ndarray 的文档中有一个部分。

【讨论】:

  • 我想这就是我必须要做的。这让我想知道为什么我必须跳过这个圈。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2015-06-13
  • 1970-01-01
  • 2018-10-27
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多