Как извлечь коэффициенты из линейного уравнения в Python без использования Numpy? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть 2 списка RED и BLUE в форме (x, y) кортежей и список линейных уравнений в виде ax + by + c. Мое требование состоит в том, чтобы извлечь коэффициенты из каждого линейного уравнения и определить на основе графиков для двух наборов точек, четко ли разделены точки с обеих сторон линии. Проблема в том, что я не могу использовать numpy.

Мой подход состоял в том, чтобы сжать 2 списка КРАСНЫХ и СИНИХ точек, используя pyplot. Теперь я пытаюсь извлечь коэффициенты с помощью регулярного выражения, как показано ниже.

lines = ["1x+1y+0","1x-1y+0","1x+0y-3","0x+1y-0.5"]

for i in lines:
    z = re.match('(\d+)?(x)?\+(\d+)?(y)?\+(\d)?', i)

Однако я не могу использовать «z», как «NoneType». Даже если я могу использовать его каким-то образом, я не уверен, как использовать перехват и наклон, чтобы определить, что КРАСНАЯ и СИНИЯ точки находятся по обе стороны от линии.

Любые указатели очень ценятся.

Попытка построения точек с помощью matplotlib

Red_x = [(x,y) for x,y in Red]
Blue_x = [(x,y) for x,y in Blue]

plt.plot(*zip(*Red_x),'or')
plt.scatter(*zip(*Blue_x))

1 Ответ

1 голос
/ 09 июля 2019

Я считаю, что вы хотите использовать findall .

Вы можете начать с простого шаблона [\d\.\-\+]+. Это позволит отловить все коэффициенты, предполагая, что коэффициенты правильно отформатированы (например, нет двойных периодов в цифрах).

>>> lines = ["1x+1y+0", "1x-1y+0", "1x+0y-3", "0x+1y-0.5"]
>>> for i in lines:
...     z = re.findall(r'[\d\.\-\+]+', i)
...     print(z)
... 
['1', '+1', '+0']
['1', '-1', '+0']
['1', '+0', '-3']
['0', '+1', '-0.5']

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

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