-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] = 60255になり、他の値は最小値と最大値の間の数値に切り替わります0 and 255

任意のヒント?

4

1 に答える 1

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]]
于 2012-11-28T18:45:18.797 に答える