2016-08-29 3 views
0

Есть ли способ сделать функцию матч Excel() в Python, так что:Функция MATCH в python?

В графе, как этот

K-Means Elbow Method results ...

... в котором я светотеневой на y = 90, я хотел бы напечатать, какое соответствующее значение x является самым близким.

Основываясь на моем исследовании, значение/ответ должно быть 4, но как я могу напечатать или сохранить это в переменной?

In: print(bss/tss*100) 

Out: [ 1.21976032e-14 7.42743185e+01 8.51440985e+01 9.21584826e+01 
     9.59771981e+01 9.74117561e+01 9.82980987e+01 9.90505760e+01 
     9.92982678e+01 9.94756800e+01 9.96396123e+01 9.97126077e+01 
     9.97593424e+01 9.98030600e+01 9.98344280e+01 9.98692896e+01 
     9.98840717e+01 9.99020097e+01 9.99142963e+01] 
+0

Python собственно не поддерживает этот уровень математического исследования. Однако NumPy и SciPy имеют разнообразную поддержку для базового численного анализа. ** SciPy.interpolate ** немного близок к тому, что вам нужно. – Prune

ответ

0

Вы также можете превзойти его с помощью этой простодушной функции. Он находит первое значение, по крайней мере, такое же, как и целевое значение, проверяет предыдущее значение и возвращает позицию (основанную на 1, а не на 0) более близкого значения.

def match (table, target): 
    for over in range(len(table)): 
     if table[over] >= target: 
      break 

    # over is the index of the first vale at least as large as the target 
    # return the position (index+1) of the nearer value 
    return over+1 if 2*target > table[over-1] + table[over] \ 
      else over 


ss_table = [ 
    1.21976032e-14, 7.42743185e+01, 8.51440985e+01, 9.21584826e+01, 
    9.59771981e+01, 9.74117561e+01, 9.82980987e+01, 9.90505760e+01, 
    9.92982678e+01, 9.94756800e+01, 9.96396123e+01, 9.97126077e+01, 
    9.97593424e+01, 9.98030600e+01, 9.98344280e+01, 9.98692896e+01, 
    9.98840717e+01, 9.99020097e+01, 9.99142963e+01 
] 

print match(ss_table, 87) 
print match(ss_table, 90) 

Для вашего примера это возвращает 3 и 4 по желанию.

+0

удивительный, спасибо огромное! – Carla

0

Вы ищете argmin функция.

from numpy import * 

print argmin(abs(data - threshold)) 

найдет индекс наименьшего отклонения от порога. Гораздо точнее указать математические отношения (argmin(abs(...))), чем скрыть это в неопределенной функции «совпадения». Таким образом, понятно, как использовать, например. два порога (верхний и нижний порог) или непостоянная функция порога. Мы можем найти ближайшую точку две функции.

Смежные вопросы