猿问

python 可以规范化对象数组吗?

我正在用 python 做机器学习课的作业。我昨天才开始学习Python,所以我不知道Python中使用的实践。


我的部分任务是从 csv(二维数组)加载数据,让我们调用它arr_2d并对其进行标准化。


我在网上找到了sklearn解决numpy方案,但他们期望二维数组作为输入。


加载后我的方法arr_2d是将它们解析为对象数组(data: [HealthRecord])。


我的解决方案是类似于此的代码(注意:有点伪代码)


result = [] # 2D array of property values

for key in ['age','height','weight',...]:

    tmp = list(map(lambda item: getattr(key, item), data))

    result.append(tmp)


结果现在包含3 * data.length项目,我将使用它sklearn来规范化数组中的单行result,然后将其旋转回来并解析规范化为HealthRecord.


我认为这过于复杂,我希望看到一个选项可以以更简单的方式做到这一点,例如发送[HealthRecord]到sklearn.normalize


下面的代码显示了我的(简化的)加载和解析:


class Person: 

    age: int

    height: int

    weight: int

    


def arr_2_obj(data: [[]]) -> Person:

    person = Person()

    person.age = data[0]

    person.height = data[1]

    person.weight = data[2]


    return person



# age (days), height (cm), weight (kg)

input = [

    [60*365, 125, 65],

    [30*365, 195, 125],

    [13*365, 116, 53],

    [16*365, 164, 84],

    [12*365, 125, 96],

    [10*365, 90, 46],    

]


parsed = []


for row in input:

    parsed.append(arr_2_obj(row))  

注意:Person类是HealthRecord


感谢您提供任何意见或见解。


编辑:拼写错误 sci-learn -> sklearn


明月笑刀无情
浏览 91回答 1
1回答

慕尼黑8549860

你不能。实际上,您正在处理表格数据。python 中用于处理表格数据的标准(如最流行的非标准库)包是pandas,因此您可以执行以下操作:import pandas as pddf = pd.DataFrame([d.__dict__ for d in data])normalized_df = (df-df.mean())/df.std() # example normalization 如果您坚持处理对象数组而不是表,您可以编写一个类来执行所需的转换以缩短符号,例如类似class ObjectList:     def __init__(self, object_type, records):         self.objects = [object_type(**record) for record in records]    def to_data_frame(self):         return pd.DataFrame([d.__dict__ for d in self.objects])class PersonList(ObjectList):     def __init__(self, records):         super().__init__(Person, records)上面假设class Person有一个接受参数, ,__init__的函数。heightageweight您还可以尝试通过重载运算符来进一步缩短符号,但除非您正在编写库代码,否则我不明白您为什么要这样做。
随时随地看视频慕课网APP

相关分类

Python
我要回答