我制作了很多等值区域的地图,我需要一个自定义函数来接受数据集中的值并返回相应的颜色。例如,以1到10,000对数分布的数据可能需要此功能:
var colors = ["#ffffcc","#c2e699","#78c679","#31a354","#006837"];
function val_to_index(val) {
var index = Math.floor(Math.log(val) / Math.log(10));
return colors[index];
}
同时,当我自动构建图例的文本时,我需要反向功能:
function index_to_val(index) {
return Math.pow(10, index);
}
var legend_labels = [0,1,2,3,4].map(index_to_val);
当它像日志/指数一样简单时,编写这两个函数都没有问题。但是当它更复杂时,它变得非常乏味。例如:
// divisions of 50,100,500,1000,5000,etc
function val_to_index(v) {
var lg = Math.log(v) / Math.log(10);
var remainder = lg % 1 > (Math.log(5) / Math.log(10)) ? 1 : 0;
var index = return Math.floor(lg) * 2 - 3 + remainder;
return colors[index];
}
function index_to_val(index) {
index += 3;
return Math.pow(10, Math.floor(index/2)) * Math.pow(5, index%2);
}
在中学代数中,我们学会了通过反转x和y变量并求解y来自动反转函数(当然,这只能用于某些函数)。我的问题是:计算机科学中有同等的操作吗?
答案 0 :(得分:2)
自动查找函数的反函数需要某种计算机代数求解器(CAS)库。如果你总是做前进操作,首先,可能有一个更简单的方法;而不是丢弃原始数据,将原始值和计算结果一起包装在对象中。这样,计算逆仅需要检索包含原始值的字段。