如何用append()函数扩展Numpy数组类



如何实现:

>>> foo = np.array([1,2,3])
array([1,2,3])
>>> foo.append(4)
array([1,2,3,4])

代替numpy的:

np.append(foo, 4)

我试过类似的东西

import numpy as np
class myarrayclass(np.array):
def append(self, value):
self.object = np.append(self.object, value)

另外,是否可以覆盖numpy类而不是创建自己的类?我不需要这项工作,只是想知道这是否可能,提前感谢!

我不确定这是否是最好的方法,但这里有一种方法。

import numpy as np
class myarrayclass(object):
def __init__(self, in_array):
self.array = in_array

def append(self, val):
self.array = np.append(self.array, val)

def show(self):
return self.array


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

myarray = myarrayclass(foo)
myarray.append(5)
myarray.show()
#Out[7]: array([1, 2, 3, 5])

制作对象时,需要使用def __init__(self, in_array)对其进行初始化。这里我包含了一个简单的append and show方法。我包含了show方法来证明append是有效的。

dubbdan答案中的代码肯定有其价值,但我建议实现如下:

import numpy as np
class MyArrayClass(np.ndarray):
def __new__(cls, *args, **kwargs):
return np.ndarray.__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
super()
def append(self, item):
return np.append(self, item)

魔鬼在于细节,答案实际上不是扩展numpy.ndarray类,而是为append函数创建一个类包装器。

最新更新