Вычисление вероятности большой матрицы Python

#python #dictionary

#python #словарь

Вопрос:

Предположим, что данная большая матрица отображает перечень товаров в магазине:

введите описание изображения здесь

Матрица представлена следующей структурой данных:

 {'products': [['milk'],
  ['bread'],
  ['eggs'],
  ['tomatoes'],
  ['cucumbers'],
  ['nuts'],
  ['cheese'], ...],
 'store_a': {0: 40,
  1: 415,
  5: 55,
  6: 7},
 'store_b': {1: 45,
  3: 44,
  5: 451,
  6: 451},       
 'store_c': {0: 455, 4: 54}}
  

То есть каждый инвентарь продукта в магазине представлен индексом products списка.
Например, запасы молока в store_a равны 40.

Цель состоит в том, чтобы найти вероятность нахождения определенного продукта в магазине. То есть получаем следующую матрицу:

введите описание изображения здесь

Необходимо написать функцию, которая получит указанную выше структуру данных и вернет ту же структуру, за исключением того, что вместо количества будет отображаться вычисление вероятности.

В приведенном выше примере ожидаемый результат:

 {'products': [['milk'],
  ['bread'],
  ['eggs'],
  ['tomatoes'],
  ['cucumbers'],
  ['nuts'],
  ['cheese'], ...],
 'store_a': {0: 0.0773694390715667,
  1: 0.802707930367505,
  5: 0.106382978723404,
  6: 0.0135396518375242},
 'store_b': {1: 0.0454086781029263,
  3: 0.0443995963673058,
  5: 0.455095862764884,
  6: 0.455095862764884},       
 'store_c': {0: 0.893909626719057, 
             4: 0.106090373280943}}
  

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

Комментарии:

1. Эффективность Ef настолько важна, возможно, вам следует работать с pandas. Фрейм данных для вычисления.

Ответ №1:

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

 input={'products': [['milk'],
  ['bread'],
  ['eggs'],
  ['tomatoes'],
  ['cucumbers'],
  ['nuts'],
  ['cheese'], ...],
 'store_a': {0: 40,
  1: 415,
  5: 55,
  6: 7},
 'store_b': {1: 45,
  3: 44,
  5: 451,
  6: 451},       
 'store_c': {0: 455, 4: 54}}

for i in input:
    if i != "products":
        sum=0
        for j in input[i]:
            sum=sum input[i][j]
        for j in input[i]:
            input[i][j]/=sum
print(input)
  

Комментарии:

1. Это, безусловно, решает проблему, но главный вопрос заключается в том, существует ли более быстрый способ