Я пытаюсь уменьшить зависимость от пакетов и находит решения для некоторых статистических вопросов о среднем, медиане, моде и взвешенном среднем.

Итак, в основном у меня есть два массива, давайте назовем их A и B с N элементами. Что будет средневзвешенным для элементов в B.

Здесь я также не хочу использовать def weightedMean. Есть какой-либо способ сделать это?

-3
user5671448 2 Мар 2018 в 22:33

3 ответа

Лучший ответ
def mul(tup):
    return tup[0]*tup[1]

A=[10, 40, 30, 50, 20]
B=[1, 2, 3, 4, 5]
print(round( sum(map(mul,zip(A,B)))/sum(B),1))

Или

print(round( sum(map(lambda x: x[0]*x[1],zip(A,B)))/sum(B),1))

Что по сути является встроенной «функцией»

https://www.hackerrank.com/challenges/s10-weighted-mean/problem

0
Patrick Artner 2 Мар 2018 в 19:39

Да, это можно сделать без использования определения функции.

Попробуй это:

wMean = 0
for i in range(N): ## Loop through all the weights
    wMean += (A[i] * B[i]) ## Multiply the weights by the result
wMean /= sum(A) ## Divide the sum to get the Weighted Mean

Конечно, вы также можете определить функцию, которая умножает два заданных числа и map() list с помощью этой функции, но вы заявили, что не хотите использовать какие-либо функции.

0
Adi219 2 Мар 2018 в 19:43

Построение Adi219, когда A не в десятичной форме:

A=[10, 40, 30, 50, 20]
B=[1, 2, 3, 4, 5]

sumA = sum(A)
lenghtOfB = len(B)
wMean = 0
for i in range(lenghtOfB):
    wMean += (A[i]/sumA * B[i]) 

print('the weighed mean is: {}'.format(wMean))
-1
Total_Insomnia 2 Мар 2018 в 19:56