Клиент агентства недвижимости хочет купить несколько квартир по 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 |
- С помощью функции
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. - Выведите значения
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)