2012-11-28 143 views
-1

特定间隔欲多维数组的数字元素映射到一个特定的时间间隔地图阵列数值,我将显示一个例子:在红宝石

原始阵列:

arr = [[-30,2,-1],[0,3,-20],[1,20,7],[40,60,50]] 

我想到阵列arr的值映射到一个间隔0和255之间

合成阵列:

arr_result = [[0, 18, 10], [5, 20, 2], [200, 255, 220]] 

我原来阵列arr[0][0] = -30的最小值是现在0和我的最大值arr[3][1] = 60现在是255,然后其他值切换到我的最小值和最大值0 and 255

任何提示之间的数字?

+2

咦?你是什​​么意思将它们映射到间隔?你的意思是规模吗? (例如-30 => 0,60 => 255)? – maerics

+1

预期结果的一些示例会很有帮助。 – evfwcqcg

+0

对不起,我最初的解释,我已经添加了一个例子,并期望现在看起来更清晰。 Maerics它只是你理解的 – ricardocaldeira

回答

7
xss = [[-30, 2, -1], [0, 3, -20], [1, 20, 7], [40, 60, 50]] 
min, max = xss.flatten(1).minmax 
factor = 255.0/(max - min) 
yss = xss.map { |xs| xs.map { |x| (factor * (x - min)).round } } 
#=> => [[0, 91, 82], [85, 94, 28], [88, 142, 105], [198, 255, 227]] 
+0

+1,用于从工具箱中挖掘'minmax'工具。 –

+0

+1,'minmax'是今天学到的一个很好的教训 –