用numpy初始化类.ndarray属性



我试图定义一个具有类型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

相关内容

  • 没有找到相关文章

最新更新