为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2023-10-11 21:30:17
我正在用 python 做机器学习课的作业。我昨天才开始学习Python,所以我不知道Python中使用的实践。我的部分任务是从 csv(二维数组)加载数据,让我们调用它arr_2d并对其进行标准化。我在网上找到了sklearn解决numpy方案,但他们期望二维数组作为输入。加载后我的方法arr_2d是将它们解析为对象数组(data: [HealthRecord])。我的解决方案是类似于此的代码(注意:有点伪代码)result = [] # 2D array of property valuesfor 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
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

你不能。实际上,您正在处理表格数据。python 中用于处理表格数据的标准(如最流行的非标准库)包是pandas,因此您可以执行以下操作:


import pandas as pd

df = 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


您还可以尝试通过重载运算符来进一步缩短符号,但除非您正在编写库代码,否则我不明白您为什么要这样做。


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 49 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信