Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121

Метод Электро 2

17.03.2023, 20:41. Показов 691. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рассматриваем все пары проектов i и j. Если по какому-либо
критерию i-ый проект лучше, чем j-ый, то соответствующий критерию вес
прибавляется к Pij (эти баллы символизируют выбор «За»), в противном
случае — к Nij (эти баллы символизируют выбор «Против»). То же самое
справедливо для j-го проекта: если j-ый проект оказывается лучше, чем iый, то соответствующий критерию вес прибавляется к Pji, в противном
случае — к Nji (обратите внимание на порядок следования индексов j и i у
P и N). Если повстречалось одинаковое для i-го и для j-го проектов
значение критерия, то оно пропускается. Затем, когда по паре i и j
рассмотрены все критерии, находятся отношения Dij = Pij/Nij и
Dji = Pji/Nji. Значения D ≤ 1 отбрасываются. Заметим, что Dji = 1/Dij (и
наоборот), таким образом, вычисления можно несколько упростить.
Сделал ручной счет, но ответы в матрице не совпадают. Знающих людей прошу помочь исправить.

мой код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
columns = ['Название', 'Оснащение', 'Удаленность от метро', 'Цена', 'Качество', 'Персонал', 'Интерьер']
 
data = [['Alex Fitness', 10, 10, 10, 4, 10, 15],
        ['Terrasport', 15, 5, 20, 12, 10, 10],
        ['Зебра', 5, 10, 7, 5, 4, 10],
        ['СССР', 10, 5, 10, 4, 10, 10],
        ['Планета Фитнесса', 15, 5, 20, 8, 15, 10],
        ['X-GYM', 5, 15, 3, 4, 10, 5],
        ['We GYM', 10, 5, 20, 8, 5, 15],
        ['Orange Fitness', 10, 15, 20, 8, 10, 5],
        ['DDX', 15, 10, 2, 8, 10, 10],
        ['Миллениум', 15, 10, 7, 8, 10, 10]]
 
scales = [5, 5, 5, 4, 3, 2]
 
df = pd.DataFrame(data, columns=columns)
df.index = range(1, 11)
df.to_csv('data.csv')
 
 
def method_electra(alt):
    alt = df.iloc[:, 1:].values
    alt[:, 1:3] *= -1
    x = np.expand_dims(alt, axis=0)
    y = np.expand_dims(alt, axis=1)
 
    p = ((x < y) * scales).sum(2)
    print(p)
    n = p.T
    np.seterr(divide='ignore', invalid='ignore')
    d = np.where((n != 0) & (p > n), p / n, 0).round(2)
    print(d)
 
 
if __name__ == '__main__':
    method_electra(df)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2023, 20:41
Ответы с готовыми решениями:

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

Нужна схема электро проводки.Духовой шкаф BOSCH HBN43W350/03 FD8511 334682, Нужна схема электро проводки
Нужна схема электро проводки.Духовой шкаф BOSCH HBN43W350/03 FD8511 334682.Обрезаны провода на переключателе режимов и таймере

Электро схема
Здравствуйте, в данной схеме недостаточная мощьность катушки, для её повышения нужно добавить выпрямитель тока и конденсатор, так вот...

17
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 07:16
Islam_pyth, Вроде “p” посчитано верно, проверка:
Python
1
2
3
4
print(sum(scales)*45 - (((x==y)*scales).sum()-sum(scales)*10)//2)
print(p.sum())
Единственная «нестыковка» - если «за» начислены баллы, а «против»==0, то по логике коэффициент «d» должен быть отличен от 0…
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
18.03.2023, 13:10  [ТС]
просто у меня не совпадают значения с ручного счета)
могу я сюда закинуть?
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 13:12
Islam_pyth, Можно
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
18.03.2023, 13:35  [ТС]
P12 = 0 + 5 + 5 + 0 + 0 + 2 = 12
N12 = 5 + 0 + 0 + 4 + 0 + 0 = 9
D12 = P12/N12 = 14/9 = 1.3 > 1 – принимаем
P21 = 5 + 0 + 0 + 4 + 0 + 0 = 9
N21 = 0 + 5 + 5 + 0 + 0 + 2 = 12
D21 = P21/N21 = 0.75 < 1 – отбрасываем
P13 = 5 + 0 + 0 + 0 + 3 + 2 = 10
N13 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D13 = P13/D13 = 10/2 = 2 > 1 – принимаем
P31 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N31 = 5 + 0 + 0 + 0 + 3 + 2 = 10
D31 = P31/N31 = 0.5 < 1 – принимаем
P14 = 0 + 5 + 0 + 0 + 0 + 2 = 7
N14 = 5 + 0 + 0 + 0 + 0 + 0 = 5
D14 = P14/N14 = 1.4 > 1 – принимаем
P41 = 5 + 0 + 0 + 0 + 0 + 0 = 5
N41 = 0 + 5 + 0 + 0 + 0 + 2 = 7
D41 = P41/N41 = 0.7 < 1 – отбрасываем
P15 = 0 + 5 + 5 + 0 + 0 + 2 = 12
N15 = 5 + 0 + 0 + 4 + 3 + 0 = 12
D15 = P15/N15 = 12/12 = 1 < 1 – отбрасываем
P51 = 5 + 0 + 0 + 4 + 3 + 0 = 12
N51 = 0 + 5 + 5 + 0 + 0 + 2 = 12
D51 = P51/N51 = 1 < 1 – отбрасываем
P16 = 5 + 0 + 0 + 0 + 0 + 2 = 7
N16 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D16 = P16/N16 = 7/10 = 0.7 < 1 – отбрасываем
P61 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N61 = 5 + 0 + 0 + 0 + 0 + 2 = 7
D61 = P61/N61 = 10/7 = 1.4 > 1 – принимаем
P17 = 0 + 5 + 0 + 0 + 3 + 0 = 8
N17 = 0 + 0 + 5 + 0 + 0 = 5
D17 = P17/N17 = 8/5 = 1.6 > 1 - принимаем
P71 = 0 + 0 + 5 + 0 + 0 = 5
N71 = 0 + 5 + 0 + 0 + 3 + 0 = 8
D71 = P71/N71 = 5/8 = 0.6 < 1 – отбрасываем
P18 = 0 + 5 + 0 + 0 + 0 + 2 = 7
N18 = 0 + 5 + 5 + 4 + 0 + 0 = 14
D18 = P18/N18 = 7/14 = 0.5 < 1 – отбрасываем
P81 = 0 + 5 + 5 + 4 + 0 + 0 = 14
N81 = 0 + 5 + 0 + 0 + 0 + 2 = 7
D81 = P81/N81 = 14/7 = 2 > 1 – принимаем
P19 = 0 + 5 + 0 + 0 + 0 + 2 = 7
N19 = 5 + 0 + 5 + 4 + 0 + 0 = 14
D19 = P19/N19 = 7/14 = 0.5 < 1 – отбрасываем
P91 = 5 + 0 + 5 + 4 + 0 + 0 = 14
N91 = 0 + 5 + 0 + 0 + 0 + 2 = 7
D91 = P91/N91 = 14/7 = 2 > 1 – принимаем
P110 = 5 + 0 + 0 + 0 + 0 + 2 = 7
N110 = 0 + 0 + 5 + 4 + 0 + 0 = 9
D110 = P110/N110 = 7/9 = 0.8 < 1 – отбрасываем
P101 = 0 + 0 + 5 + 4 + 0 + 0 = 9
N101 = 5 + 0 + 0 + 0 + 0 + 2 = 7
D101 = P101/N101 = 9/7 = 1.3 > 1 – принимаем

P23 = 5 + 0 + 0 + 4 + 3 + 0 = 12
N23 = 0 + 5 + 5 + 0 + 0 + 0= 10
D23 = P23/N23 = 12/10 = 1.2 > 1 – принимаем
P32 = 0 + 5 + 5 + 0 + 0 + 0= 10
N32 = 5 + 0 + 0 + 4 + 3 + 0 = 12
D32 = P32/N32 = 10/12 = 0.8 < 1 – отбрасываем
P24 = 0 + 0 + 0 + 4 + 0 + 0 = 4
N24 = 0 + 0 + 5 + 0 + 0 = 5
D24 = P24/N24 = 4/5 = 0.8 < 1 – отбрасываем
P42 = 0 + 0 + 5 + 0 + 0 = 5
N42 = 0 + 0 + 4 + 0 + 0 = 4
D42 = P42/N42 = 5/4 = 1.25 > 1 – принимаем
P25 = 0 + 0 + 0 + 4 + 0 + 0 = 4
N25 = 0 + 0 + 0 + 0 + 3 + 0 = 3
D25 = P25/N25 = 4/3 = 1.3 > 1 – принимаем
P52 = 0 + 0 + 0 + 0 + 3 + 0 = 3
N52 = 0 + 0 + 0 + 4 + 0 + 0 = 4
D52 = P52/N52 = 0.75 < 1 – отбрасываем
P26 = 5 + 0 + 0 + 4 + 0 + 2 = 11
N26 = 5 + 5 + 0 + 0 + 0 + 0 = 10
D26 = P26/N26 = 11/10 = 1.1 > 1 – принимаем
P62 = 5 + 5 + 0 + 0 + 0 + 0 = 10
N62 = 5 + 0 + 0 + 4 + 0 + 2 = 11
D62 = P62/N62 = 10/11 = 0.9 < 1 – отбрасываем
P27 = 5 + 0 + 0 + 4 + 3 + 0 = 12
N27 = 0 + 0 + 0 + 0 + 0 + 2 = 2
D27 = P27/N27 = 12/2 = 6 > 1 – принимаем
P72 = 0 + 0 + 0 + 0 + 0 + 2 = 2
N72 = 5 + 0 + 0 + 4 + 3 + 0 = 12
D72 = P72/N72 = 2/12 = 0.2 < 1 – отбрасываем
P28 = 5 + 0 + 0 + 4 + 0 + 2 = 11
N28 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D28 = P28/N28 = 11/5 = 2.2 > 1 – принимаем
P82 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N82 = 5 + 0 + 0 + 4 + 0 + 2 = 11
D82 = P82/N82 = 5/11 = 0.6 < 1 – отбрасываем
P29 = 0 + 0 + 0 + 4 + 0 + 0 = 4
N29 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D29 = P29/N29 = 4/5 = 0.8 < 1 – отбрасываем
P92 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N92 = 0 + 0 + 0 + 4 + 0 + 0 = 4
D92 = P92/N92 = 5/4 = 1.25 > 1 – принимаем
P210 = 5 + 0 + 0 + 4 + 0 + 0 = 9
N210 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D210 = P210/N210 = 9/10 = 0.9 < 1 – отбрасываем
P102 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N102 = 5 + 0 + 0 + 4 + 0 + 0 = 9
D102 = P102/N102 = 10/9 = 1.1 > 1 – принимаем


P34 = 0 + 5 + 5 + 5 + 0 + 0 = 15
N34 = 5 + 0 + 0 + 0 + 3 + 0 = 8
D34 = P34/N34 = 15/8 = 1.9 > 1 – принимаем
P43 = 5 + 0 + 0 + 0 + 3 + 0 = 8
N43 = 0 + 5 + 5 + 5 + 0 + 0 = 15
D43 = P43/N43 = 8/15 = 0.5 < - 1 отбрасываем
P35 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N35 = 5 + 0 + 0 + 4 + 3 + 0 = 12
D35 = P35/N35 = 10/12 = 0.8 < 1 – отбрасываем
P53 = 5 + 0 + 0 + 4 + 3 + 0 = 12
N53 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D53 = P53/N53 = 12/10 = 1.2 > 1 – принимаем
P36 = 0 + 0 + 0 + 0 + 0 + 2 = 2
N36 = 5 + 5 + 5 + 0 + 3 + 0 = 18
D36 = P36/N36 = 2/18 = 0.1 < 1 – отбрасываем
P63 = 5 + 5 + 5 + 0 + 3 + 0 = 18
N63 = 0 + 0 + 0 + 0 + 0 + 2 = 2
D63 = P63/N63 = 9 > 1 – принимаем
P37 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N37 = 0 + 0 + 0 + 4 + 0 + 2 = 6
D37 = P37/N37 = 10/6 = 1.7 > 1 – принимаем
P73 = 0 + 0 + 0 + 4 + 0 + 2 = 6
N73 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D73 = P73/N73 = 6/10 = 0.6 < 1 – отбрасываем
P38 = 0 + 0 + 5 + 0 + 0 + 2 = 7
N38 = 5 + 5 + 0 + 4 + 3 + 0 = 17
D38 = P38/N38 = 7/17 = 0.4 < 1 – отбрасываем
P83 = 5 + 5 + 0 + 4 + 3 + 0 = 17
N83 = 0 + 0 + 5 + 0 + 0 + 2 = 7
D83 = P83/N83 = 17/7 = 2.4 > 1 – принимаем
P39 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N39 = 5 + 0 + 5 + 4 + 3 + 0 = 17
D39 = P39/N39 = 5/17 = 0.3 < 1 – отбрасываем
P93 = 5 + 0 + 5 + 4 + 3 + 0 = 17
N93 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D93 = P93/N93 = 17/5 = 3.4 > 1 – принимаем
P310 = 0 + 0 + 0 + 0 + 0 + 0 = 0
N310 = 0 + 0 + 0 + 4 + 3 + 0 = 7
D310 = P310/N310 = 0/7 = 0 < 1 – отбрасываем
P103 = 0 + 0 + 0 + 4 + 3 + 0 = 7
N103 = 0 + 0 + 0 + 0 + 0 + 0 = 0
D103 = P103/N103 = 7/0 = INF


P45 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N45 = 0 + 0 + 0 + 4 + 3 + 0 = 7
D45 = P45/N45 = 0.7 < 1 – отбрасываем
P54 = 0 + 0 + 0 + 4 + 3 + 0 = 7
N54 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D54 = P54/N54 = 7/5 = 1.4 > 1 – принимаем
P46 = 5 + 0 + 0 + 0 + 0 + 2 = 7
N46 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D46 = P46/N46 = 7/10 = 0.7 < 1 - отбрасываем
P64 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N64 = 5 + 0 + 0 + 0 + 0 + 2 = 7
D64 = P64/N64 = 10/7 = 1.4 > 1 – принимаем
P47 = 5 + 0 + 5 + 0 + 3 + 0 = 13
N47 = 0 + 0 + 0 + 4 + 0 + 2 = 6
D47 = P47/N47 = 13/6 = 2.2 > 1 – принимаем
P74 = 0 + 0 + 0 + 4 + 0 + 2 = 6
N74 = 5 + 0 + 5 + 0 + 3 + 0 = 13
D74 = P74/N74 = 6/13 = 0.5 < 1 – отбрасываем
P48 = 5 + 0 + 5 + 0 + 0 + 2 = 12
N48 = 0 + 5 + 0 + 4 + 0 + 0 = 9
D48 = P48/N48 = 12/9 = 1.3 > 1 – принимаем
P84 = 0 + 5 + 0 + 4 + 0 + 0 = 9
N84 = 5 + 0 + 5 + 0 + 0 + 2 = 12
D84 = P84/N84 = 9/12 = 0.75 < 1 – отбрасываем
P49 = 0 + 0 + 0 + 0 + 0 + 0 = 0
N49 = 0 + 0 + 5 + 4 + 0 + 0 = 9
D49 = P49/N49 = 0/9 = 0 < 1 – отбрасываем
P94 = 0 + 0 + 5 + 4 + 0 + 0 = 9
N94 = 0 + 0 + 0 + 0 + 0 + 0 = 0
D94 = P94/N94 = 9/0 = INF
P410 = 5 + 0 + 0 + 0 + 0 + 0 = 5
N410 = 0 + 5 + 5 + 4 + 0 + 0 = 14
D410 = P410/N410 = 5/14 = 0.4 < 1 - отбрасываем
P104 = 0 + 5 + 5 + 4 + 0 + 0 = 14
N104 = 5 + 0 + 0 + 0 + 0 + 0 = 5
D104 = P104/N104 = 14/5 = 2.8 > 1 – принимаем


P56 = 5 + 0 + 0 + 4 + 3 + 2 = 14
N56 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D56 = P56/N56 = 14/10 = 1.4 > 1 – принимаем
P65 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N65 = 5 + 0 + 0 + 4 + 3 + 2 = 14
D65 = P65/N65 = 10/14 = 0.7 < 1 – отбрасываем
P57 = 5 + 0 + 0 + 0 + 3 + 0 = 8
N57 = 0 + 0 + 0 + 0 + 0 + 2 = 2
D57 = P57/N57 = 8/2 = 4 > 1 – принимаем
P75 = 0 + 0 + 0 + 0 + 0 + 2 = 2
N75 = 5 + 0 + 0 + 0 + 3 + 0 = 8
D75 = P75/N75 = 2/8 = 0.25 < 1 – отбрасываем
P58 = 5 + 0 + 0 + 0 + 3 + 2 = 10
N58 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D58 = P58/N58 = 10/5 = 2 > 1 – принимаем
P85 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N85 = 5 + 0 + 0 + 0 + 3 + 2 = 10
D85 = P85/N85 = 5/10 = 0.5 < 1 – отбрасываем
P59 = 0 + 0 + 5 + 0 + 3 + 0 = 8
N59 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D59 = P59/N59 = 8/5 = 1.6 > 1 – принимаем
P95 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N95 = 0 + 0 + 5 + 0 + 3 + 0 = 8
D95 = P95/N95 = 5/8 = 0.6 < 1 – отбрасываем
P510 = 5 + 0 + 0 + 0 + 3 + 0 = 8
N510 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D510 = P510/N510 = 8/5 = 1.6 > 1 – принимаем
P105 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N105 = 5 + 0 + 0 + 0 + 3 + 0 = 8
D105 = P105/N105 = 5/8 = 0.6 < 1 – отбрасываем


P67 = 0 + 5 + 5 + 0 + 3 + 0 = 13
N67 = 5 + 0 + 0 + 4 + 0 + 2 = 11
D67 = P67/N67 = 13/11 = 1.2 > 1 – принимаем
P76 = 5 + 0 + 0 + 4 + 0 + 2 = 11
N76 = 0 + 5 + 5 + 0 + 3 + 0 = 13
D76 = P76/N76 = 11/13 = 0.8 < 1 – отбрасываем
P68 = 0 + 0 + 5 + 0 + 0 + 0 = 5
N68 = 5 + 0 + 0 + 4 + 0 + 0 = 9
D68 = P68/N68 = 5/9 = 0.5 < 1 – отбрасываем
P86 = 5 + 0 + 0 + 4 + 0 + 0 = 9
N86 = 0 + 0 + 5 + 0 + 0 + 0 = 5
D86 = P86/N86 = 9/5 = 1.8 > 1 – принимаем
P69 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N69 = 5 + 0 + 5 + 4 + 0 + 2 = 16
D69 = P69/N69 = 5/16 = 0.3 < 1 – отбрасываем
P96 = 5 + 0 + 5 + 4 + 0 + 2 = 16
N96 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D96 = P96/N96 = 16/5 = 3.2 > 1 – принимаем
P610 = 0 + 5 + 5 + 0 + 0 + 2 = 12
N610 = 0 + 0 + 0 + 4 + 0 + 2 = 6
D610 = P610/N610 = 12/6 = 2 > 1 – принимаем
P106 = 0 + 0 + 0 + 4 + 0 + 2 = 6
N106 = 0 + 5 + 5 + 0 + 0 + 2 = 12
D106 = P106/N106 = 6/12 = 0.5 < 1 – отбрасываем


P78 = 0 + 0 + 0 + 0 + 0 + 2 = 2
N78 = 0 + 5 + 0 + 0 + 3 + 0 = 8
D78 = P78/N78 = 2/8 = 0.25 < 1 – отбрасываем
P87 = 0 + 5 + 0 + 0 + 3 + 0 = 8
N87 = 0 + 0 + 0 + 0 + 0 + 2 = 2
D87 = P87/N87 = 8/2 = 4 > 1 = принимаем
P79 = 0 + 0 + 0 + 0 + 0 + 2 = 2
N79 = 5 + 0 + 5 + 0 + 3 + 0 = 13
D79 = P79/N79 = 2/13 = 0.2 < 1 – отбрасываем
P710 = 5 + 0 + 0 + 0 + 0 + 2 = 7
N710 = 0 + 5 + 5 + 0 + 0 + 0 = 10
D710 = P710/N710 = 7/10 = 0.7 < 1 - отбрасываем
P107 = 0 + 5 + 5 + 0 + 0 + 0 = 10
N107 = 5 + 0 + 0 + 0 + 0 + 2 = 7
D107 = P107/N107 = 10/7 = 1.4 > 1 – принимаем


P89 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N89 = 5 + 0 + 5 + 0 + 0 + 2 = 12
D89 = P89/N89 = 5/12 = 0.4 < 1 – отбрасываем
P98 = 5 + 0 + 5 + 0 + 0 + 2 = 12
N98 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D98 = P98/N98 = 12/5 = 2.4 > 1 – принимаем
P810 = 5 + 5 + 0 + 0 + 0 + 0 = 10
N810 = 0 + 0 + 5 + 0 + 0 + 2 = 7
D810 = P810/N810 = 10/7 = 1.4 > 1 – принимаем
P108 = 0 + 0 + 5 + 0 + 0 + 2 = 7
N108 = 5 + 5 + 0 + 0 + 0 + 0 = 10
D108 = P108/N108 = 7/10 = 0.7 < 1 – отбрасываем


P910 = 5 + 0 + 5 + 0 + 0 + 0 = 10
N910 = 0 + 5 + 0 + 0 + 0 + 0 = 5
D910 = P910/N910 = 10/5 = 2 > 1 – принимаем
P109 = 0 + 5 + 0 + 0 + 0 + 0 = 5
N109 = 5 + 0 + 5 + 0 + 0 + 0 = 10
D109 = P109/N109 = 5/10 = 0.5 < 1 – отбрасываем
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 13:41
Islam_pyth, [QUOTE] P12 = 0 + 5 + 5 + 0 + 0 + 2 = 12[/QUOTE]
Первая же ошибка -> должно быть:
P12 = 0 + 0 + 5 + 0 + 0 + 2 = 127
-10 < -5, а условие на «больше»

Добавлено через 2 минуты
Удаленность и цена иду со знаком минус - чем больше число, тем хуже
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
18.03.2023, 13:45  [ТС]
но в матрице значения крайне отличаются от ручного счета
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 13:47
Islam_pyth, по коду баллы за удаленность прямопропорциональны удаленности - чем дальше, тем число больше.
То же и с ценой
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
18.03.2023, 13:55  [ТС]
так, а что исправить нужно?
Извиняюсь, начинаю тупить)
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 14:08
Islam_pyth, если в данных «удаленность» пропорциональна км и «цена» стоимости, то всё верно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import pandas as pd 
import numpy as np 
 
columns = ['Название', 'Оснащение', 'Удаленность от метро', 'Цена', 'Качество', 'Персонал', 'Интерьер']
 
data = [['Alex Fitness', 10, 10, 10, 4, 10, 15],
        ['Terrasport', 15, 5, 20, 12, 10, 10],
        ['Зебра', 5, 10, 7, 5, 4, 10],
        ['СССР', 10, 5, 10, 4, 10, 10],
        ['Планета Фитнесса', 15, 5, 20, 8, 15, 10],
        ['X-GYM', 5, 15, 3, 4, 10, 5],
        ['We GYM', 10, 5, 20, 8, 5, 15],
        ['Orange Fitness', 10, 15, 20, 8, 10, 5],
        ['DDX', 15, 10, 2, 8, 10, 10],
        ['Миллениум', 15, 10, 7, 8, 10, 10]]
 
scales = [5, 5, 5, 4, 3, 2]
df = pd.DataFrame(data, columns=columns)
df.index = range(1, 11)
#df.to_csv('data.csv')
print(df)
 
 
def method_electra(alt):
    alt = df.iloc[:, 1:].values
    alt[:, 1:3] *= -1
    x = np.expand_dims(alt, axis=0)
    y = np.expand_dims(alt, axis=1)
 
    p = ((x < y) * scales).sum(2)
    #################################################################
    # проверка
    print(sum(scales)*45 - (((x==y)*scales).sum()-sum(scales)*10)//2)
    print(p.sum())
    #################################################################
    n = p.T
    
    print(p, ‘\n’)
    #np.seterr(divide='ignore', invalid='ignore')
    d = np.where((n != 0) & (p > n), p / n, 0).round(2)
    print(d)
 
 
if __name__ == '__main__':
    method_electra(df)
Если нет, то исправить 26-ю строчку. В ней «переворачивается» оценка

Добавлено через 3 минуты
И, если что, матрица «D» не должна(!) быть симметричной
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
18.03.2023, 15:11  [ТС]
еще в ручном счете есть бесконечные значения, по заданию они тоже должны присутствовать в матрице
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.03.2023, 15:58
Islam_pyth, 40-я строчка:
Python
1
2
…
d = np.where(p > n, p / n, 0).round(2)
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
19.03.2023, 14:40  [ТС]
некоторые значения все еще сильно отличаются от ручного
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
19.03.2023, 17:09
Islam_pyth, В начале нужно разобраться по колонкам:
- Удаленность - чем больше балл, тем дальше(хуже, а значит значение нужно умножить на -1) или ближе(лучше)
- Цена - чем больше балл, тем дороже(хуже, а значит значение нужно умножить на -1) или дешевле(лучше)
Потом уже искать ошибки в ручном подсчете
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
19.03.2023, 19:59  [ТС]

У меня в таблице наоборот. В удаленности чем больше балл тем лучше итд
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
19.03.2023, 20:23
Islam_pyth, вот эту таблицу сразу нужно было.
26-ю строчку исправить на:
Python
1
alt['Цена'] *= -1
0
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 121
19.03.2023, 20:30  [ТС]
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
19.03.2023, 20:52
Islam_pyth, блин, перепутал (там же numpy):
Python
1
alt[:, 2] *= -1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2023, 20:52
Помогаю со студенческими работами здесь

Теория электро цепей
Лаба по ТЭЦ кто поможет (Теория электро цепей)

Электро-водонагреватель в ванне
Хотим купить электрический водонагреватель, но места для него нигде нет. Можно ли его установить в ванной комнате? У кого может он уже там...

Как обезопасить электро сеть?
Здравствуйте, я только начала изучать схемотехнику и пытаюсь собрать простое устройство для зарядки аккумуляторов. Проблема в том, что в...

Ускоритель для электро двигателя
У меня когда-то была идея сделать ускоритель по типу NOS но только для электро двигателей а именно простой набор кондинсаторов которые в...

Не слышно электро гитару на Win 10
Здравствуйте! Я знаю, что тема поднималась уже сто раз и тут, и на других ресурсах. Я перечитал и пытался справится с проблемой уже по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru