2017-10-15 48 views
1

我只是想知道如何解决python3.6中的arributeerror。 错误是'list'对象没有属性'astype'。 我的相关代码如同打击。如何解决AttributeError:'list'对象没有属性'astype'?

def _init_mean_std(self, data): 
    data = data.astype('float32') 
    self.mean, self.std = np.mean(data), np.std(data) 
    self.save_meanstd() 
    return data 

有没有人可以给我建议? 谢谢!

+3

通过将'data'转换为具有'astype'属性的东西。说,一个numpy数组。做'numpy进口np; data = np.array(data).astype('float32')' – Kanak

+0

我不知道你是否自愿做,但是请注意,默认'np.array(data)'实际上会产生' float64's。通过执行'print(data.dtype)'来检查。 – Kanak

回答

1

根本问题是Python列表和NumPy数组的混淆,它们是不同的数据类型。被调用为np.foo(array)的NumPy方法通常不会抱怨,如果你给它们一个Python列表,他们会将它转换为一个NumPy数组。但是,如果您尝试调用对象中包含的方法,例如array.foo(),那么它当然必须具有适当的类型。

我建议使用

data = np.array(data, dtype=np.float32) 

,使得数组的类型是已知的NumPy的一次。这可以避免不必要的工作,首先创建一个数组然后将其转换为另一种类型。

NumPy建议使用dtype objects而不是像“float32”这样的字符串。

相关问题