Я работаю над проектом python, который перебирает все возможные комбинации записей в строке данных Excel, чтобы найти, какая комбинация дает правильный результат.
Чтобы достичь этого, я повторяю через различные комбинации 0 и 1, чтобы выбрать, требуется ли эта запись для комбинации. 1 означает, что точка данных включена в расчет, а 0 означает, что точка данных не включена.
Таким образом, количество комбинаций будет равно 2 ^ (Количество столбцов Excel)
Пример данных Excel: 1, 22, 7, 11, 2, 4
Пример итерации: (1, 0, 0, 0, 1, 0)
Я мог бы искать, какая комбинация данных Excel даст результат 3, единственная правильная комбинация данных Excel - это итерация выше.
Однако я бы знал, что любое значение больше чем 3, не будет включено в возможную комбинацию, равную 3. Таким образом, я хотел бы выбрать и установить значения этих столбцов на 0 и перебрать только другие столбцы. Это, в свою очередь, уменьшит количество комбинаций. Комбинация = 2 ^ (Количество столбцов Excel - Фиксированные столбцы ввода)
На данный момент я использую Itertools.products для получения всей необходимой мне комбинации:
Numbers = ["0","1"]
for item in itertools.product(Numbers, repeat=len(df.columns)):
Iteration = pd.DataFrame(item) # Iteration e.g (0,1,1,1,0,0,1)
Data = df.iloc[0] # Excel data row
Data = Data.to_numpy()
Iteration = Iteration.astype(float)
Answer = np.dot(Data, Iteration) # Get the result of (Iteration * Data) to check if answer is correct
Это приводит к повторению через комбинации, которые, как я знаю, не сработают. Есть ли способ перебирать только 0 и 1 в определенных позициях комбинации, сохраняя при этом известные записи фиксированным значением (0 или 1), чтобы уменьшить возможные комбинации?
В некоторых файлах Excel содержится более 25 столбцы, которые в результате будут 33 554 432 комбинации. Таким образом, я пытаюсь уменьшить количество столбцов, которые мне нужно перебирать, устанавливая значения для столбцов, которые я знаю.
Если вам понадобятся дополнительные разъяснения, дайте мне знать. Я начинающий программист, поэтому могу упустить из виду или слишком усложнить простое решение.