2012-01-18 34 views
1

我已经将数据集从CSV导入到Ruby中作为数组数组(每行都是数组)。我想将每列的标准化从0到1.因此,我必须找到每列的最大值和最小值。是否有捷径可寻?或者我必须从每一行中解析出每一列的值?正常化Ruby中的CSV列

谢谢!

回答

2

您可以使用Array#transpose使内部数组成为列,然后使用Enumerable#min#max来获取您的值。

copy = csv_data.transpose 
copy.each do |a| #do whatever you need here 
    a.min 
    a.max 
end 

或像这样

copy = csv_data.transpose 
arr_min = copy.map(&:min) # returns an array of the min values 
arr_max = copy.map(&:max) # returns an array of the max values 
+0

伟大的答案。请注意,如果速度是一个问题,则可以使用单个“每个”迭代来计算最小值和最大值,从而将运行时间减半(不太优雅)。 (但是,也许不是,因为最小/最大值是在C中实现的) – Phrogz 2012-01-19 00:31:45