gpt4 book ai didi

javascript - 使用对数刻度将事件组映射到分段

转载 作者:行者123 更新时间:2023-12-01 02:32:56 26 4
gpt4 key购买 nike

我有一些事件(一组事件组的数组),我想使用对数刻度将这些事件映射到段。

我希望解决方案遵守一些规则:

  1. 必须使用 Math.log(x+1),因为它可以很好地缩放 1 和小于 1 的数字

  2. 我想计算单个分段,而不仅仅是总数

  3. 组 i 的线段之和必​​须等于另一个组的线段之和 如果事件的线性和相等(即,如果我有事件 [1, 1] 和 [2],则将 j 组归为一组 两组映射段的数量必须相等)

我已经开发了您在下面看到的解决方案,但它部分有效,因为 groups[0].segments 的总和与 groups[1].segments 的总和不同,因为 log(1+1)+log(1 +1) != log(2+1)

如何在规则 3 起作用的情况下使用 Math.log(x+1) 来缩放事件?

var logSegmentLen = function(x) {
return Math.log(x+1);
}

var groupOfSegmentsTotal = function(segmentLenFn) {
var f = function(arrayOfSegments) {
let segments = arrayOfSegments.map(segmentLenFn);
let total = segments.reduce((a,b) => a+b,0);
return {
total: total,
segments: segments
}
}
return f;
}

var events = [ [1, 1], [2]]
var groups = events.map(groupOfSegmentsTotal(logSegmentLen));
console.log(groups[0].segments, groups[1].segments);
console.log(Math.abs(groups[0].total - groups[1].total) < 0.001); // true must be printed

最佳答案

How can I use Math.log(x+1) to scale the events while having rule 3 working?

显然这是不可能的。您的要求 #3 可以针对给定的比例函数 F(x)

重新表述
sum(Xi) = sum(Yj)  =>  sum(F(Xi)) = sum(F(Yj))

实际上意味着唯一适合它的F(x)的形式是F(x) = k*x,即只是一个线性比例。任何非线性标度(包括对数)都会破坏该要求。您可能应该描述您的更高级别的问题,并且有人可能能够对该问题提出非自相矛盾的翻译。

旁注证明草图。将 {Xi} 修复为 n 个相同值 x 的集合,将 {Yj} 修复为 m 个相同 y 的集合。所以

sum(Xi) = n*x
sum(Yj) = m*y
sum(F(Xi)) = n*F(x)
sum(F(Yj)) = m*F(y)

要求变为:

sum(Xi) = sum(Yj)  =>  sum(F(Xi)) = sum(F(Yj))
n*x = m*y => n*F(x) = m*F(y)

这适用于任意整数nm。现在让我们修复F(1) = k。这意味着对于任何m/nF(m/n) = m/n*k。由于实数可以用任意精度的分数来近似,这意味着对于任何 x F(x) = x*k

关于javascript - 使用对数刻度将事件组映射到分段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com