Все возможные комбинации элементов трех векторов в Python - PullRequest
1 голос
/ 31 января 2020

У меня есть три списка, каждый из которых содержит, скажем, 2 элемента. Как получить массив (8x3), который содержит все возможные комбинации (с заменой) элементов в трех списках?

Пример:

vec1 = [4, 6]
vec2 = [2, 4]
vec3 = [1, 5]

output = [[4, 2, 1], [4, 2, 5], [4, 4, 1], [4, 4, 5], [6, 2, 1], [6, 4, 5], [6, 2, 5], [6, 4, 1]]

Это мой код (упрощенно) ):

import scipy.stats as st
percentiles = [0.01, 0.99]
draws1 = st.norm.ppf(percentiles, 0, 1)
draws2 = st.norm.ppf(percentiles, 0, 1)
draws3 = st.norm.ppf(percentiles, 0, 1)

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Вы можете использовать простые for петли:

import numpy as np
vec1 = [4, 6]
vec2 = [2, 4]
vec3 = [1, 5]

output = np.zeros([8,3])
counter = 0
for i in vec1:
    for j in vec2:
        for k in vec3:
            temp = [i,j,k]
            output[counter,:] = [i,j,k]
            counter += 1
0 голосов
/ 31 января 2020

Вы можете использовать numpy .meshgrid () примерно так:

np.array(np.meshgrid([4, 6], [2, 4], [1, 5])).T.reshape(-1,3)

В результате:

 array([[4, 2, 1],
       [4, 4, 1],
       [6, 2, 1],
       [6, 4, 1],
       [4, 2, 5],
       [4, 4, 5],
       [6, 2, 5],
       [6, 4, 5]])
...