从文件加载数据并规范化

Posted

技术标签:

【中文标题】从文件加载数据并规范化【英文标题】:Load data from file and normalize 【发布时间】:2015-03-04 03:02:00 【问题描述】:

如何规范化从文件加载的数据?这就是我所拥有的。数据看起来像这样:

65535, 3670, 65535, 3885, -0.73, 1
65535, 3962, 65535, 3556, -0.72, 1

每行的最后一个值是一个目标。我想拥有相同的数据结构,但具有标准化值。

import numpy as np
dataset = np.loadtxt('infrared_data.txt', delimiter=',')

# select first 5 columns as the data
X = dataset[:, 0:5]

# is that correct? Should I normalize along 0 axis?
normalized_X = preprocessing.normalize(X, axis=0)

y = dataset[:, 5]

现在的问题是,如何正确打包 normalized_Xy 回来,它具有以下结构:

dataset = [[normalized_X[0], y[0]],[normalized_X[1], y[1]],...]

【问题讨论】:

np 看起来像一个模块(我假设numpy!?)。请用它标记您的问题。这一方面可以帮助人们更好地理解问题,另一方面可以引起对此有更深入了解的人的注意。 :) 对于这个问题(我没有numpy,所以我不知道这是否有效):dataset = [a + [b] for a, b in zip(normalized_X, y)](不保证!) 谢谢。差不多了。输出为:[(array([ 1. , 0.0202, 1. , 0.0455, 0.2121]), 1.0), (array([ 1. , 0.0301, 1. , 0.0255, 0.2273]), 1.0)]。如何摆脱这个array() 并使外部元组的元素只是逗号分隔? 是的。正如我所说:numpy。在普通的python中它会起作用。 dataset = [magic_function_to_convert_to_normal_list(a) + [b] for a, b in zip(normalized_X, y)] ^^ 但我不推荐它,因为你会失去 numpy 的魔力 【参考方案1】:

听起来您要的是np.column_stack。例如,让我们设置一些虚拟数据:

import numpy as np
x = np.arange(25).reshape(5, 5)
y = np.arange(5) + 1000

这给了我们:

X:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
Y:
array([1000, 1001, 1002, 1003, 1004])

我们想要:

new = np.column_stack([x, y])

这给了我们:

New:
array([[   0,    1,    2,    3,    4, 1000],
       [   5,    6,    7,    8,    9, 1001],
       [  10,   11,   12,   13,   14, 1002],
       [  15,   16,   17,   18,   19, 1003],
       [  20,   21,   22,   23,   24, 1004]])

如果您不想打字,也可以使用:

In [4]: np.c_[x, y]
Out[4]:
array([[   0,    1,    2,    3,    4, 1000],
       [   5,    6,    7,    8,    9, 1001],
       [  10,   11,   12,   13,   14, 1002],
       [  15,   16,   17,   18,   19, 1003],
       [  20,   21,   22,   23,   24, 1004]])

但是,出于可读性考虑,我不鼓励将 np.c_ 用于交互式使用以外的任何用途。

【讨论】:

正是我需要的。谢谢你。您还可以告诉我如何将打印的结果格式化为例如1, 2, 3 而不是 1.0000e+00, 2.0000e+00, 3.0000e+00

以上是关于从文件加载数据并规范化的主要内容,如果未能解决你的问题,请参考以下文章

将非规范化数据加载到数据仓库中

雪花数据加载最佳实践规范化还是非规范化?

调整SQL Server中的大型查询

如何通过 Python Pandas 正确规范化 json

核心数据保存和加载到多个实体

Android硬件抽象层模块编写规范