Клиент агентства недвижимости хочет купить несколько квартир по 60 тыс. рублей за квадратный метр, чтобы сдавать их в аренду. Он уже выбрал одну квартиру на сайте и решил её приобрести, но в интересах агентства порекомендовать ему ещё. Определите с помощью косинусного расстояния, какую из двух других доступных для продажи квартир стоит ему предложить.

Ваша задача — определить квартиры с одинаковой стоимостью квадратного метра. Посмотрите на рисунок с векторами ⃗a, ⃗b и ⃗c, каждый из которых представляет собой одну из квартир. Как известно, плата за квадратный метр квартиры — это её цена, разделённая на площадь. По графику видно, что:

  • Квадратные метры квартир-векторов ⃗a и ⃗c стоят одинаково, а у квартиры-вектора ⃗b — дороже.
  • Угол ⃗a ⃗b больше, чем ⃗a , ⃗c . Угол ⃗a, ⃗c вовсе равен нулю, потому что векторы ⃗a, ⃗c лежат один на другом.
  • Косинусное расстояние векторов ⃗a, ⃗c меньше, чем ⃗a и ⃗b .

Отсюда вывод: цены квадратного метра похожи у тех векторов-квартир, у которых меньше косинусное расстояние. Поэтому для решения задачи достаточно вычислить два d(cos) .

Создайте переменные flat_1, flat_2 и flat_3 с массивами numpy, которые содержат данные о площади и цене квартир:

Объекты Переменные Площадь, м^2 Цена, руб.
Квартира, которую выбрал клиент flat_1 50 3000000
Первая доступная для продажи квартира flat_2 50 4000000
Вторая доступная для продажи квартира flat_3 100 6000000
  1. С помощью функции get_d_cos получите два косинусных расстояния и сохраните их значения в переменные d_cos_1_2 и d_cos_1_3: в d_cos_1_2 — расстояние между flat_1 и flat_2, а в d_cos_1_3 — между flat_1 и flat_3.
  2. Выведите значения d_cos_1_2 и d_cos_1_3, которые получили.
# необходимые импорты
import numpy as np
# та же функция, написанная в одну строку
def get_d_cos(a, b):
    return 1 - a.dot(b) / (np.linalg.norm(a) * np.linalg.norm(b))
# вектор с данными первой квартиры
flat_1 = np.array([50, 3000000])
# вектор с данными второй квартиры
flat_2 = np.array([50, 4000000])
# вектор с данными третьей квартиры
flat_3 = np.array([100, 6000000])
# косинусное расстояние между первой и второй квартирами
d_cos_1_2 = get_d_cos(flat_1, flat_2)
# косинусное расстояние между первой и третьей квартирами
d_cos_1_3 = get_d_cos(flat_1, flat_3)
# вывод полученных значений
print(d_cos_1_2, d_cos_1_3)