我试图定义一个具有类型numpy.ndarray
属性的包装器类。该属性必须通过调用__init__()
来初始化。
对于1D数组,脚本按预期运行。但是,对于多维数组,python返回以下错误:only length-1 arrays can be converted to Python scalars
import numpy as np
class myArr(np.ndarray):
def __init__(self,Arr):
self.Arr = Arr
npArr = np.zeros((3)) # works
#npArr = np.zeros((3,5)) # does not work
print npArr
wrappedArr = myArr(npArr)
print wrappedArr.Arr
这是怎么回事?
python 2.7.6, numpy 1.8.2如果您只是想拥有类型ndarray
的属性,是否有从它继承的任何特定原因?
我想说的是,通过子类化ndarray
并重写__init__
,您正在扰乱numpy的初始化过程,从而产生您所看到的错误。
查看numpy文档中关于子类化narray的更多信息。
从object
继承(将MyArr
转换为常规的新样式类)解决了您的问题:
import numpy as np
class MyArr(object):
def __init__(self, arr):
self.arr = arr
np_arr_1 = np.zeros((3))
np_arr_2 = np.zeros((3, 5))
wrapped_arr_1 = MyArr(np_arr_1)
wrapped_arr_2 = MyArr(np_arr_2)
print wrapped_arr_1.arr
print wrapped_arr_2.arr