我想知道规范化/标准化numpy的最佳方法是什么。 为了说明这一点,我指的不是一个数学矩阵,而是一个也有文本列(如标签)的记录数组。
a = np.genfromtxt("iris.csv", delimiter=",", dtype=None)
print a.shape
> (150,)
如您所见,我不能例如处理a[:,:-1]
,因为形状是一维的。
我发现最好的方法是遍历所有列:
for nam in a.dtype.names[:-1]:
col = a[nam]
a[nam] = (col - col.min()) / (col.max() - col.min())
还有更优雅的方法吗?有没有“规范化”或“标准化”之类的方法?
你用的是什么版本的NumPy?对于版本1.5.1,我不理解这种行为。我制作了一个简短的文本文件作为示例,保存为
test.txt
:当我执行下面的代码时,这就是我得到的:
我只是想知道你的数据有什么不同。
有很多方法可以做到这一点,但有些方法比其他方法更干净。
通常,在numpy中,将字符串数据保存在单独的数组中。
(事情比R的数据帧要低级一点。通常,您只需将内容打包到关联的类中,但要将不同的数据类型分开。)
老实说,numpy并没有为处理这种“灵活”的数据类型而优化(尽管它确实可以做到这一点)。像^{} 这样的东西为“类似电子表格”的数据提供了更好的接口(而pandas只是numpy之上的一层)。
但是,当您传入字段名列表时,结构化数组(这就是您在这里所拥有的)将允许您按列对它们进行切片。(例如
data[['col1', 'col2', 'col3']]
)无论如何,有一种方法是这样做:
然而,这远非理想。如果您想在适当的位置执行操作(如您当前所做的那样),最简单的解决方案是您已经拥有的:只需遍历字段名。
顺便说一下,使用
pandas
,您将执行以下操作:相关问题 更多 >
编程相关推荐