我有一个大的二维数组,我希望只声明一次,并根据参数偶尔更改其中的一些值,而不必遍历整个数组。
为了构建这个数组,我使用dtype = object子类化了numpy ndarray类,并将要更改的元素分配给一个函数,例如:
为了构建这个数组,我使用dtype = object子类化了numpy ndarray类,并将要更改的元素分配给一个函数,例如:
def f(parameter):
return parameter**2
for i in range(np.shape(A)[0]):
A[i,i]=f
for j in range(np.shape(A)[0]):
A[i,j]=1.
我已经重写了__getitem__
方法,使其在给定的参数是可调用的函数时返回该函数的计算结果,否则返回该值本身。
def __getitem__(self, key):
value = super(numpy.ndarray, self).__getitem__(key)
if callable(value):
return value(*self.args)
else:
return value
先前,self.args
被提供给了myclass的实例。
然而,我需要在最后使用浮点数数组,但是用这种技巧无法将该数组简单地转换为dtype=float
数组。我还尝试使用numpy视图,但对于dtype=object
也不起作用。
你有更好的替代方案吗?我应该重写视图方法而不是getitem吗?
编辑未来可能需要使用Cython,因此如果您有涉及C指针的解决方案,我很感兴趣。
f
吗?带有常量参数吗? - Bas Swinckelsscipy.sparse
吗?dok
格式是一个字典,(i,j)
元组作为键。这和lil
(列表的列表)是访问/更改选定项的两种最快方法。 - hpaulj