Комбинации в матрице для каждой строки - PullRequest
0 голосов
/ 30 января 2020

(1) Дано:

matrix = [[1528.1, 1530.1, 1546.1, 1552.5, 1565.2], [1529.1, 1531.1, 1547.1, 1550.5, 1564.2]]

(2) Вычислить:

print("combo[0]=", list(itertools.combinations(matrix[0], 3)))

print("combo[1]=", list(itertools.combinations(matrix[1], 3)))

(3) Результаты:

combo[0]= [
(1528.1, 1530.1, 1546.1), (1528.1, 1530.1, 1552.5), (1528.1, 1530.1, 1565.2), (1528.1, 1546.1, 1552.5), 
(1528.1, 1546.1, 1565.2), (1528.1, 1552.5, 1565.2), (1530.1, 1546.1, 1552.5), (1530.1, 1546.1, 1565.2),
(1530.1, 1552.5, 1565.2), (1546.1, 1552.5, 1565.2)
]

combo[1]= [(1529.1, 1531.1, 1547.1), (1529.1, 1531.1, 1550.5), (1529.1, 1531.1, 1564.2), (1529.1, 1547.1, 1550.5), 
(1529.1, 1547.1, 1564.2), (1529.1, 1550.5, 1564.2), (1531.1, 1547.1, 1550.5), (1531.1, 1547.1, 1564.2), 
(1531.1, 1550.5, 1564.2), (1547.1, 1550.5, 1564.2)
]

Вопрос: Что такое самый питон c (и компактный и / или эффективный) формат для достижения результирующей матрицы combo=[combo[0], combo[1]]?

Ответы [ 2 ]

1 голос
/ 30 января 2020

Попробуйте, может быть:

import itertools

matrix = [[1528.1, 1530.1, 1546.1, 1552.5, 1565.2], [1529.1, 1531.1, 1547.1, 1550.5, 1564.2]]

combo=list(map(lambda x: list(itertools.combinations(x, 3)), matrix))

Выходы:

[[(1528.1, 1530.1, 1546.1), (1528.1, 1530.1, 1552.5), (1528.1, 1530.1, 1565.2), (1528.1, 1546.1, 1552.5), (1528.1, 1546.1, 1565.2), (1528.1, 1552.5, 1565.2), (1530.1, 1546.1, 1552.5), (1530.1, 1546.1, 1565.2), (1530.1, 1552.5, 1565.2), (1546.1, 1552.5, 1565.2)], [(1529.1, 1531.1, 1547.1), (1529.1, 1531.1, 1550.5), (1529.1, 1531.1, 1564.2), (1529.1, 1547.1, 1550.5), (1529.1, 1547.1, 1564.2), (1529.1, 1550.5, 1564.2), (1531.1, 1547.1, 1550.5), (1531.1, 1547.1, 1564.2), (1531.1, 1550.5, 1564.2), (1547.1, 1550.5, 1564.2)]]
1 голос
/ 30 января 2020

Я думаю, что этот код:

import itertools
matrix = [[1528.1, 1530.1, 1546.1, 1552.5, 1565.2], [1529.1, 1531.1, 1547.1, 1550.5, 1564.2]]
matrix_combo = [list(itertools.combinations(matrix[i],3)) for i in range(len(matrix))]
print(matrix_combo)

для диапазона l oop:

import itertools
matrix = [[1528.1, 1530.1, 1546.1, 1552.5, 1565.2], [1529.1, 1531.1, 1547.1, 1550.5, 1564.2]]
for i in range(len(matrix)):
    matrix_combo = [list(itertools.combinations(matrix[i],3))]
print(matrix_combo)
...