我不明白为什么这段代码不起作用:
import numpy as np
class Normalizer:
def __init__(self,x):
self.x = x
def mean(self):
return np.sum(self.x)/np.size(self.x)
def mean_zero(self):
return self.x - self.x.mean()
def new_calc(self):
return self.x.mean_zero()
a = np.random.randint(150,200,(5,8))
heights = Normalizer(a)
print(a)
print(heights.mean())
print(heights.mean_zero())
print(heights.mean_zero().mean())
print(heights.new_calc())
它正确执行了heghts.mean_zero()
,但是在方法def new_calc(self)
中却没有执行。如果有人可以向我解释这一点将是很棒的。谢谢!
答案 0 :(得分:1)
我不明白为什么这段代码不起作用:
如果运行以下代码,它将引发错误:
AttributeError: 'numpy.ndarray' object has no attribute 'mean_zero'
找到问题所在,唯一调用mean_zero
的地方是new_calc
方法。因此,第一步完成了。
分析,如果您查看Normalize
类,则它具有一个属性x
,类型为numpy.ndarray
。如果您仔细阅读错误消息,它会指出ndarray
类型没有属性mean_zero
。另一方面,您在类中定义了mean_zero
方法,这是您应该调用的方法。
这两个步骤可以得出结论,问题出在new_calc
方法中:
def new_calc(self):
return self.mean_zero() #(wrong)return self.x.mean_zero()
答案 1 :(得分:0)
插入self.x.mean_zero()写入self.mean_zero()
import numpy as np
class Normalizer:
def __init__(self,x):
self.x = x
def mean(self):
return np.sum(self.x)/np.size(self.x)
def mean_zero(self):
return self.x - self.mean()
def new_calc(self):
return self.mean_zero()
a = np.random.randint(150,200,(5,8))
heights = Normalizer(a)
print(a)
print(heights.mean())
print(heights.mean_zero())
print(heights.mean_zero().mean())
print(heights.new_calc())
答案 2 :(得分:0)
我不确定x
中的__init__
是什么,但是很可能您实际上想在{{1 }}变量(同一对象):
mean_zero
答案 3 :(得分:0)
您正在使用'a'初始化Normalizer,这是np.random.randint的输出,该输出返回numpy.ndarray对象。
在new_calc方法中,您尝试调用ndarray对象的mean_zero方法,但是ndarray没有此类方法。 mean_zero 是Normalizer上的一种方法,但是self.x的类型不是Normalizer。
我不确定这段代码new_calc
应该做什么。如果您可以更清楚地说明这一点,我也许可以提供更多帮助。
答案 4 :(得分:0)
罪魁祸首:
def new_calc(self):
return self.x.mean_zero()
原因:
self.x
是Normalizer
类的属性。因此,如果heights
是Normalizer
类的实例,则heights.x
是self.x
。
答案:
def new_calc(self):
return self.mean_zero()
理由:
AttributeError:“ numpy.ndarray”对象没有属性“ mean_zero”
ndarray
没有这种方法。 mean_zero
是规范化方法