Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python可以规范化对象数组吗?_Python_Python 3.x - Fatal编程技术网

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

python可以规范化对象数组吗?,python,python-3.x,Python,Python 3.x,我正在用python为机器学习课做作业。我昨天刚开始学习python,所以我不知道python中使用的实践 我的部分任务是从csv(2D数组)加载数据,让我们调用它arr_2D,并对其进行规范化 我在网上找到了sklearn和numpy解决方案,但他们希望2D数组作为输入 加载arr\u2d后,我的方法是将它们解析为对象数组(data:[HealthRecord]) 我的解决方案是类似于此的代码(注意:有点伪代码) 结果现在包含3*个数据。长度项,我将使用sklearn对Result数组中的单行

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

我的部分任务是从csv(2D数组)加载数据,让我们调用它
arr_2D
,并对其进行规范化

我在网上找到了
sklearn
numpy
解决方案,但他们希望2D数组作为输入

加载
arr\u2d
后,我的方法是将它们解析为对象数组(
data:[HealthRecord]

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

结果现在包含
3*个数据。长度
项,我将使用
sklearn
Result
数组中的单行进行规范化,然后将其向后旋转并解析为
healthcrecord

我认为这太复杂了,我希望看到一种更简单的方法,比如将
[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
类别为
healthcrecord

感谢您的任何意见或见解


编辑:键入sci学习->sklearn

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

将熊猫作为pd导入
df=pd.DataFrame([d.\uuu dict\uuu用于数据中的d])
标准化的_df=(df.mean())/df.std()#示例标准化
如果您坚持处理对象数组而不是表,您可以编写一个类,该类进行必要的转换以缩短符号,例如

类对象列表:
定义初始化(自、对象类型、记录):
self.objects=[记录中记录的对象类型(**记录)]
def到数据帧(自身):
返回pd.DataFrame([d.\u dict\u用于self.objects中的d])
类个人列表(对象列表):
定义初始化(自我,记录):
super().\uuuuu init\uuuuuuuuuuu(个人,记录)
以上假设
类人
具有接受参数
身高
年龄
体重
函数


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

Id要补充的是,解析的CSV的实际长度是70000*13。另外,我正在将数据解析到类中,以便于操作。加载数据集后,我根据不正确或超出范围的值清理行,并将文本值编码为数字。这是否回答了您的问题@乔:不,不是。我知道你们提到的线程,正如我在问题中所说的,我正在寻找另一种方法。上述线程将2D数组视为输入,而我希望传递对象数组以进行规范化。感谢您的帮助。我把“你不能”标记为正确答案。我已经将pandas作为
DataFrame
加载了CSV,但是在我的4MB CSV(70000行,13列)上使用它需要更长的时间。你建议采用什么方法和结构?编辑:我所说的更长时间是指使用DataFrame.values,而不是整个DataFrame的速度更快。read_csv是我所知道的在python中读取csv的最快方式(与numpy函数相反),之后它具体取决于您使用它进行的计算-通常对于机器学习,您需要数字形式的数据,例如,作为numpy ndarray或张量,您可能需要将分类字段转换为1-热向量,消除您可能不会直接使用的字段,如字符串等。在任何情况下,您最终需要一组矩阵进行计算。
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))