Восстановить масштабирование MinMax с двумя перекрывающимися списками - PullRequest
0 голосов
/ 06 мая 2019

После моего вопроса здесь: Вернуть масштабирование MinMax , я пробую другой подход.

На этот раз у меня есть 2 больших списка:

[ ...many values, 0, 20, 22, 32, 11, 24,  0, 12, 11, 33]
                [26, 25, 34, 45, 45, 35, 71, 27, 27, 34, many values...]

значения в 2 больших списках были масштабированы с помощью скейлера MinMax:

V = (actual - min) / (max - min)

min и max являются постоянными в списке.min и max различны для двух больших списков.

Два больших списка «перекрываются» в двух меньших списках:

[ 0, 20, 22, 32, 11, 24,  0, 12, 11, 33]
[26, 25, 34, 45, 45, 35, 71, 27, 27, 34]

Для первого списка я знаю, что:

V = (actual - min1) / (max1 - min1)

И для второго списка я знаю, что:

 V = (actual - min2) / (max2 - min2)

Технически, я могу выразить actual как функцию min1, min2, max1, max2,

V1.max1 - V1.min1 + min1 - V2.max2 +V2.min2 - min2 = 0
<=> V1.x0 - (V1+1).x1 - V2.x2 + (V2-1).x3 = 0

получить набор из 4 уравнений и решить с помощью numpy.linalg.solve:

data = [(V1, V1+1, V2, V2-1) for V1, V2 in zip(vals1, vals2) if V1 !=0 and V2 != 0]
res = [0 for v in data]

x = np.linalg.solve(data, res)

Но я получаю исключение LinAlgError: Singular matrix каждый раз, когда я пытаюсь это сделать:

lib/python3.7/site-packages/numpy/linalg/linalg.py in solve(a, b)
    401     signature = 'DD->D' if isComplexType(t) else 'dd->d'
    402     extobj = get_linalg_error_extobj(_raise_linalgerror_singular)
--> 403     r = gufunc(a, b, signature=signature, extobj=extobj)
    404
    405     return wrap(r.astype(result_t, copy=False))

lib/python3.7/site-packages/numpy/linalg/linalg.py in _raise_linalgerror_singular(err, flag)
     95
     96 def _raise_linalgerror_singular(err, flag):
---> 97     raise LinAlgError("Singular matrix")
     98
     99 def _raise_linalgerror_nonposdef(err, flag):

LinAlgError: Singular matrix

AmЯ снова пропустил независимые уравнения?

1 Ответ

0 голосов
/ 06 мая 2019

Наличие одного и того же V не означает, что у вас есть 2 уравнения для 2 переменных, но 2 уравнения для 4 переменных, к сожалению, это еще не разрешимо.

Чтобы разрешить систему с n неизвестными переменными, вам нужноне менее n независимых уравнений.

Хорошо, вы можете «установить» min1 и min2 и вывести max1 и max2 (если, например, вы знаете, min1 всегда будет 0 или если вам все равнофактическое минимальное значение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...