2

我正在尝试在 python 中编写一个函数,该函数给出三个变量输入的所有可能组合,其大小可以为 1-4。我编写了一个嵌套的 forloop,我相信它提供了所有可能的组合,但我正在努力将输出存储在单个 1D 数组中。我不知道我是否必须将它存储为 3D 数组并压缩它?这是我的代码:

import numpy as np
def test(x,y,z):
    len1 = len(x)
    len2 = len(y)
    len3 = len(z)
    lentot = len1*len2*len3
    codons = np.empty((1,lentot))
    for i in range(len1):
        for j in range(len2):
            for k in range(len3):
                codons[] = np.array([x[i],y[j],z[k]])
    return codons

基本上,我无法弄清楚在倒数第二行的括号中放置什么内容以使我的输出存储为一维数组。我什至不知道这是否可能。我尝试使用 itertools.product 为我执行此操作,但输出存储为单个元素,而不是数组(每行都是它自己的元素)。对于我的应用程序,重要的是我可以通过另一个函数传递这个输出,所以我需要它是一个字符串数组。

4

3 回答 3

1

您可以将它们附加到列表中,然后在最后将其转换为数组。

def test(x, y, z):
    codon_list = []
    for i in x:
        for j in y:
            for k in z:
                codon_list.append([i, j, k])
    codons = np.array(codon_list)
于 2020-06-23T21:33:36.437 回答
0

使用 itertools 中的组合函数itertools.combinations([x, y, z], 3)似乎是最简单的方法。

于 2020-06-23T21:40:09.997 回答
0

您可以使用列表推导使您的生活更轻松:

def test(x,y,z):
    codons = np.array([[i,j,k] for i in x for j in y for k in z])
    return codons
于 2020-06-23T23:03:48.323 回答