gpt4 book ai didi

python - 子类化和扩展 numpy.ndarray

转载 作者:行者123 更新时间:2023-11-28 18:40:52 25 4
gpt4 key购买 nike

我需要一些基本的数据类表示,我想使用现有的 numpy 类,因为它们已经提供了很好的功能。

但是,我不确定这是否是执行此操作的方法(尽管到目前为止它有效)。所以这是一个例子:

Position 类应该像一个简单的 numpy.array,但它应该映射属性 .x.y .z 到三个数组组件。我覆盖了 __new__ 方法,它返回一个带有初始数组的 ndarray 。为了允许访问和修改数组,我为每个属性定义了属性和 setter 。

import numpy as np


class Position(np.ndarray):
"""Represents a point in a 3D space

Adds setters and getters for x, y and z to the ndarray.

"""
def __new__(cls, input_array=(np.nan, np.nan, np.nan)):
obj = np.asarray(input_array).view(cls)
return obj

@property
def x(self):
return self[0]

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

@property
def y(self):
return self[1]

@y.setter
def y(self, value):
self[1] = value

@property
def z(self):
return self[2]

@z.setter
def z(self, value):
self[2] = value

然而,对于这样一个基本逻辑,这似乎有点太多代码,我想知道我是否以“正确”的方式来做。我还需要一堆其他类,如 Direction,它们将具有许多其他功能(更改时自动规范等),在我开始集成 numpy 之前,我想我问你......

最佳答案

我认为 ndarray 在这里是错误的选择,您可能想要一个简单的命名元组。

>>> import collections
>>> Position = collections.namedtuple('Positions', 'x y z')
>>> p = Position(1, 2, 3)
>>> p
Positions(x=1, y=2, z=3)

你可以这样解包

>>> x, y, z = p
>>> x, y, z
(1, 2, 3)
>>>

关于python - 子类化和扩展 numpy.ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224794/

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