Найти в Дзене
ЦифроПроф

Расстояние между векторами

Найдите стоимость всех товаров в первом и втором магазинах сети «Я вас услышал». Сохраните их в переменных stocks1_cost (англ. «стоимость запасов на складе») и stocks2_cost. Найдите суммарную стоимость товаров двух магазинов сети и сохраните её в переменной total_cost (англ. «общая стоимость»). import numpy as np
import pandas as pd
shop1_price = [20990, 11990 , 5390, 3190, 1990, 10990, 5999, 2290, 8111 , 3290]
shop1_quantity = [19, 11, 8, 15, 23, 7, 14, 9, 10, 4]
shop2_price = [20990, 12490, 4290, 2790, 2390, 10990, 4990, 2490, 8990, 3290]
shop2_quantity = [10, 16, 20, 9, 18, 12, 10, 11, 18, 22]
models = ['Apple AirPods Pro',
'Apple AirPods MV7N2RU/A',
'JBL Tune 120TWS',
'JBL TUNE 500BT',
'JBL JR300BT',
'Huawei Freebuds 3',
'Philips TWS SHB2505',
'Sony WH-CH500',
'Sony WF-SP700N',
'Sony WI-XB400',
]
stocks1 = pd.DataFrame({'Цена':shop1_price,
'Количество':sh
Фото из открытых источников
Фото из открытых источников

Найдите стоимость всех товаров в первом и втором магазинах сети «Я вас услышал». Сохраните их в переменных stocks1_cost (англ. «стоимость запасов на складе») и stocks2_cost.

Найдите суммарную стоимость товаров двух магазинов сети и сохраните её в переменной total_cost (англ. «общая стоимость»).

import numpy as np
import pandas as pd

shop1_price = [20990, 11990 , 5390, 3190, 1990, 10990, 5999, 2290, 8111 , 3290]
shop1_quantity = [19, 11, 8, 15, 23, 7, 14, 9, 10, 4]

shop2_price = [20990, 12490, 4290, 2790, 2390, 10990, 4990, 2490, 8990, 3290]
shop2_quantity = [10, 16, 20, 9, 18, 12, 10, 11, 18, 22]

models = ['Apple AirPods Pro',
'Apple AirPods MV7N2RU/A',
'JBL Tune 120TWS',
'JBL TUNE 500BT',
'JBL JR300BT',
'Huawei Freebuds 3',
'Philips TWS SHB2505',
'Sony WH-CH500',
'Sony WF-SP700N',
'Sony WI-XB400',
]
stocks1 = pd.DataFrame({'Цена':shop1_price,
'Количество':shop1_quantity}, index=models)
stocks2 = pd.DataFrame({'Цена':shop2_price,
'Количество':shop2_quantity}, index=models)

stocks1_price = stocks1['Цена'].values
stocks1_quantity = stocks1['Количество'].values

stocks2_price = stocks2['Цена'].values
stocks2_quantity = stocks2['Количество'].values

# общая стоимость товаров в магазине 1
stocks1_cost = stocks1_price@stocks1_quantity

# общая стоимость товаров в магазине 2
stocks2_cost = stocks2_price@ stocks2_quantity

total_cost = stocks1_cost+ stocks2_cost
#print(stocks1_cost)
#print(stocks2_cost)
print('Общая стоимость всех товаров в сети:', total_cost, 'руб.')

Длина вектора, или его модуль, равна квадратному корню из скалярного произведения вектора на себя.

Задача 1

Постройте таблицу расстояний между населёнными пунктами и сохраните её в переменной distances. Представьте данные как список списков. Каждая строка — это расстояние от одного населённого пункта до остальных.

Добавьте в таблицу distances названия всех сёл и деревень. Обратите внимание, что здесь колонки называются не по правилам Python — кириллицей и с заглавной буквы. Названия деревень на латинице выглядят нечитабельно, а код должен понимать не только автор, но и другие разработчики. Функция print() выведет результат на экран.

import numpy as np
import pandas as pd
from scipy.spatial import distance


x_axis = np.array([0.0, 0.18078584, 9.32526599, 17.09628721,
4.69820241, 11.57529305, 11.31769349, 14.63378951])

y_axis = np.array([0.0, 7.03050245, 9.06193657, 0.1718145,
5.1383203, 0.11069032, 3.27703365, 5.36870287])

shipments = np.array([5, 7, 4, 3, 5, 2, 1, 1])

village = ['Тетерье',
'Журавец',
'Корсунь',
'Берёзовка',
'Протасово',
'Трудки',
'Нижний Туровец',
'Вышний Туровец']

data = pd.DataFrame({'x_coordinates_km': x_axis,
'y_coordinates_km': y_axis,
'deliveries': shipments}, index=village)

vectors = data[['x_coordinates_km', 'y_coordinates_km']].values

distances = []
for village_from in range(len(village)):
row = []
for village_to in range(len(village)):
value = distance.euclidean(vectors[village_from], vectors[village_to])
row.append(value)
distances.append(row)# < напишите код здесь >

distances_df = pd.DataFrame(distances, index=village, columns=village)
print(distances_df)

Задача 2

Вы знаете, сколько заказов за неделю доставляют в каждую точку. Выберите оптимальный для склада компании «Дрон Горыныч» населённый пункт. Для этого найдите расстояние между пунктами, удвойте его (полёты туда и обратно) и умножьте на еженедельное количество доставок. Сохраните результат в списке shipping_in_week. При расчёте расстояния используйте функцию np.dot().

Выберите населенный пункт с наименьшей суммарной дистанцией до соседей.

import numpy as np
import pandas as pd
from scipy.spatial import distance

x_axis = np.array([0.0, 7.03050245, 9.06193657, 0.1718145,
5.1383203, 0.11069032, 3.27703365, 5.36870287])
y_axis = np.array([0., 0.18078584, 9.32526599, 17.09628721,
4.69820241, 11.57529305, 11.31769349, 14.63378951])
shipments = np.array([5, 7, 4, 3, 5, 2, 1, 1])

village = ['Тетерье',
'Журавец',
'Корсунь',
'Берёзовка',
'Протасово',
'Трудки',
'Нижний Туровец',
'Вышний Туровец']

data = pd.DataFrame({'x_coordinates_km': x_axis,
'y_coordinates_km': y_axis,
'deliveries': shipments}, index=village)

vectors = data[['x_coordinates_km', 'y_coordinates_km']].values

distances = []
for village_from in range(len(village)):
row = []
for village_to in range(len(village)):
value = distance.euclidean(vectors[village_from], vectors[village_to])
row.append(value)
distances.append(row)

shipping_in_week = []
for i in range(len(village)):
row = 2 * np.dot(np.array(distances[i]), shipments)
shipping_in_week.append(row)

shipping_in_week_df = pd.DataFrame({'distance': shipping_in_week}, index=village)

print(shipping_in_week_df)

print()
print('Населённый пункт для склада:', shipping_in_week_df.idxmin()[0])