Решение однородных наименьших квадратов в numpy [duplicate]

Проблема нетривиальна, если речь идет о объектах хоста или более сложном объекте, чем сумка значений

  • , вы вызываете геттер для получения значения или используете ли вы скопировать поверх дескриптора свойства?
  • что, если цель слияния имеет сеттер (либо собственное свойство, либо его цепочку прототипов)? Вы считаете значение уже существующим или вызываете установщик для обновления текущего значения?
  • вы вызываете функции собственной собственности или копируете их? Что, если они связаны функциями или функциями стрелок в зависимости от чего-то в своей цепочке видимости в момент их определения?
  • что, если это что-то вроде узла DOM? Вы, конечно, не хотите относиться к нему как к простому объекту и просто глубоко объединить все его свойства в
  • , как обращаться с «простыми» структурами, такими как массивы или карты или множества? Рассматривать их уже есть или слить их?
  • как бороться с неперечислимыми собственными свойствами?
  • как насчет новых поддеревьев?

Еще одна вещь, которую следует иметь в виду: графы объектов, которые содержат циклы. Обычно это не сложно - просто сохраните Set уже посещенных исходных объектов, но часто забывайте.

Вероятно, вы должны написать функцию глубокого слияния, которая ожидает только примитивные значения и простые объекты - в большинстве тех типов, которые алгоритм структурированного клона может обрабатывать - в качестве источников слияния. Бросьте, если он сталкивается с чем-либо, с которым он не может справиться или просто назначить по ссылке вместо глубокого слияния.

Другими словами, алгоритм одноразового использования не требуется, вам либо нужно катиться самостоятельно, либо смотреть для библиотечного метода, который распространяется на ваши прецеденты.

1
задан stoney78us 10 October 2016 в 06:35
поделиться

1 ответ

Вы устанавливаете ограничение, заставляя термин решения равным 1, а затем решая остальную линейную систему. Если у вас есть решение, вы можете нормализовать.

import numpy as np

a = np.arange(9).reshape(3, 3)
b = a[:, 0].copy()
# we impose a condition that first term be 1, 
x = np.linalg.lstsq(a[:, 1:], -b)[0]
x = np.r_[1, x]
x /= np.linalg.norm(x)
print(a.dot(np.r_[1, x])) # [0, 0, 0]
2
ответ дан Elliot 19 August 2018 в 03:33
поделиться
  • 1
    Что делать, если для всех x s.t. Ax = 0, первый элемент x равен 0? Кроме того, говоря «мы знаем, что первый из них равен 1», должен быть «мы налагаем, что первый член равен 1». – P. Camilleri 10 October 2016 в 06:54
  • 2
    Честная оценка. Думаю, это делает этот вопрос повторением stackoverflow.com/questions/5889142/… . – Elliot 10 October 2016 в 07:59
  • 3
    Да, я помечен как дубликат. Хорошая идея, хотя – P. Camilleri 10 October 2016 в 08:16
Другие вопросы по тегам:

Похожие вопросы: