перестановка числовых комбинаций с помощью критериев общего числа строк и гибкого порядка

#python #python-3.x

#python #python-3.x

Вопрос:

Мне нужна матрица со всеми возможными числовыми комбинациями с учетом k чисел и суммы строк, равной 1. Один простой пример:

числа = [0, 0.5, 1]

Эти числа необходимо переставить в матрицу со всеми возможными комбинациями чисел, складывающимися до 1. Важно, чтобы присутствовали все k чисел. В этом простом случае конечный результат должен быть таким. Все числа присутствуют, и каждая строка добавляет до 1:

 d = {'1': [1, 0, 0, 0.5, 0.5, 0], '2': [0, 0, 1, 0.5, 0, 0.5], '3':[0, 1, 0, 0, 0.5, 0.5]}
  

До сих пор я пробовал использовать itertools.permutations через приведенный ниже код:

 numbers = list(itertools.permutations([0,0.5,1], 3))
  

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

Кто-нибудь хочет помочь? Был бы высоко оценен!!

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

1. Некоторые моменты, которые делают этот вопрос совершенно запутанным. Ожидаемый результат не является матрицей. «Строки» не складываются до 1. Почему длина каждой строки содержит 6 элементов? …?

2. но я думаю, что в примере [1, 0, 0, 0.5, 0.5, 0] каждая строка добавляет до 2?

3. Если вы суммируете вектор на вектор, у вас будет [1,1,1,1, …] , я думаю, это то, что он имеет в виду?

Ответ №1:

Быстрый старт

Это всего лишь краткое резюме совет при решении этой проблемы.

  1. Попробуйте отредактировать свой вопрос, пока все не поймут: чем проще его понять всем, тем проще он будет казаться и вам.

  2. Ваша проблема связана с комбинацией, но не совсем так, как вы думаете:

Если вы перевернете свою проблему с ног на голову :

Для каждого столбца

  • Сначала решите, хотите ли вы a 1 или 2 0.5 .
  • Затем выберите (по комбинации) индексы для этих элементов

Отображение матрицы

  • Создайте матрицу [0] * n * n
  • Для каждого столбца заполните то, что вы выбрали из приведенного выше.

Если вы все сделаете правильно, у вас должно быть декартово произведение размера

  • Количество возможностей для столбцов *
  • Количество столбцов