2012-04-05 2 views
0

범위의 범위는 1 - 0.00000X입니다. 대부분은 0.000823과 같은 작은 숫자입니다. 거리를 더 가깝게 배치하려면 어떻게 매핑해야합니까? sqrt 메소드를 사용했지만 다른 제안은 없습니까?1 - .0000X에서 1 - 0.0X까지의 숫자를 표준화 하시겠습니까?

업데이트

예 1-0.1 사이 숫자 내가 그들과 함께 문제가 없습니다. 내 문제는 0.1 이하입니다. 0.1에 더 가까이 가져 가야합니다. > 0.0004 또는 0.004

  • 0.023 - -

    • 0.00004> 0.05 또는 0.09
  • +2

    나는 이러한 값을 매핑하는 수많은 방법을 상상할 수 있습니다. 가장 적절한 방법은 그들이 표현하는 것과 사용 방법을 결정하는 것과 같은 것에 달려 있습니다. 예를 들어, sqrt를 사용하여 무엇이 잘못 되었습니까? –

    +0

    번호가 1-0 범위에 있도록하고 싶습니다. 내 문제는 내가 0.000023 같은 낮은 숫자가 많이있다. sqrt는 그것들을 잘 줄이지 만 나는 더 나은 것을 필요로한다. 예를 들어 4 이상 0, .0000X 또는 0.00000000X가있는 숫자는 작게도 1, 0.000X 또는 0.0X 일 수도 있습니다. – tnaser

    +0

    다시 "더 좋음"을 정의하십시오. 예를 들어 위의 모든 숫자를 매핑하고 0.1에서 1로 말한 다음 0-0.99에서 균등하게 분산시킬 수 있습니다. –

    답변

    3

    Have you tried logarithms?, 기능 (물론 t = 1 - min value의)

    y = 1 - C*log(x)C = 1/-log(eps)

    매핑 곳 범위의 수 0 ..1. 범위가 필요하지 않고 번호가 서로 가깝다면 축척 비율을 삭제할 수 있습니다.

    편집 : 이것은 물론 뺄셈없이 표현할 수 있습니다. 0.0000000001 (10^-10)의 엡실론와 C = 1/log(eps) 예를 들어

    이, 당신이 얻을

    y = 1 + C*log(x) C = -0.1 :

    0.0000000001 => 0 
    0.000000001 => 0.1 
    0.00000001 => 0.2 
    ... 
    0.1   => 0.9 
    1   => 1 
    

    편집 : 당신이하지 않으려면 0.1 ... 1.0에서 범위를 변경하지만 더 작은 숫자 만 변경 한 다음 범위를 0 ... 0.1로 조정하십시오. 이것은 함수가 적용되기 전에 x에 10을 곱한 다음에 10으로 다시 나누면됩니다. 물론이 경우에는 값이 0.1보다 작은 경우에만 scale 함수를 사용하십시오.

    +0

    1- log (x)에 대해 위의 예를 확인하십시오. 낮은 숫자에 더 많은 가중을줍니다. 예를 들어 .0003은 .3보다 높습니다. – tnaser

    +0

    물론 가능합니다. 예를 들어 준'sqrt'도 마찬가지입니다. 그래서 무엇입니까? – hirschhornsalz

    +0

    그러나 1보다 작은 수의 로그가 음수이기 때문에 반대로를 빼면 – tnaser

    0

    음, 간단한 방법은 최소한 하나 (예를 들어, 1-t)를 계산하기 위해, 그리고 세그먼트를 매핑 할 것 [1-t, 1] ~ [0, 1]. 매핑 기능은 선형 수 :

    xnew = (xold - 1)/t + 1 
    


    당신의 숫자가 eps < x <= 1 만족하는 경우

    +0

    0과 1 사이의 매핑이 필요 없습니다. – tnaser

    +0

    @tnaser : 예, 매핑은 0과 1 사이입니다.사용해보기 :-) – Vlad

    +0

    숫자가 0.002이고 최소값이 0.00005이면 -0.499가됩니까? . used (X-1)/(1-min + 1) – tnaser