Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将3个数组合并为1个矩阵(Python 3)_Python_Arrays_List_Merge_Concatenation - Fatal编程技术网

将3个数组合并为1个矩阵(Python 3)

将3个数组合并为1个矩阵(Python 3),python,arrays,list,merge,concatenation,Python,Arrays,List,Merge,Concatenation,我有3个长度相等的数组(例如): [a,b,c] [1,2,3] [i,ii,iii] 我想将它们组合成一个矩阵: |a, 1, i | |b, 2, ii | |c, 3, iii| 我遇到的问题是,当我使用诸如dstack、hstack或串联等代码时。我将它们以我可以使用的方式进行数字添加或堆叠。您可以使用: 它映射多个容器的相似索引,以便它们可以作为单个实体使用 a1 = ['a', 'b', 'c'] b1 = ['1', '2', '3'] c1 = ['i', 'ii',

我有3个长度相等的数组(例如):

  • [a,b,c]
  • [1,2,3]
  • [i,ii,iii]
  • 我想将它们组合成一个矩阵:

    |a, 1, i  |
    |b, 2, ii |
    |c, 3, iii|
    
    我遇到的问题是,当我使用诸如
    dstack
    hstack
    串联等代码时。我将它们以我可以使用的方式进行数字添加或堆叠。

    您可以使用:

    它映射多个容器的相似索引,以便它们可以作为单个实体使用

    a1 = ['a', 'b', 'c']
    
    b1 = ['1', '2', '3']
    
    c1 =  ['i', 'ii', 'iii']
    
    
    print(list(zip(a1,b1,c1)))
    
    输出:

    [('a', '1', 'i'), ('b', '2', 'ii'), ('c', '3', 'iii')]
    
    [['a' '1' 'i']
     ['b' '2' 'ii']
     ['c' '3' 'iii']]
    
    [['a', '1', 'i'], ['b', '2', 'ii'], ['c', '3', 'iii']]
    
    [('a', 'b', 'c'), ('1', '2', '3'), ('i', 'ii', 'iii')]
    
    编辑:

    我只是想向前走一步,然后将列表展平,然后使用
    numpy.reformate

    flattened_list = []
    
    #flatten the list
    for x in res:
        for y in x:
            flattened_list.append(y)
    
    #print(flattened_list)
    
    import numpy as np
    data = np.array(flattened_list)
    shape = (3, 3)
    print(data.reshape( shape ))
    
    输出:

    [('a', '1', 'i'), ('b', '2', 'ii'), ('c', '3', 'iii')]
    
    [['a' '1' 'i']
     ['b' '2' 'ii']
     ['c' '3' 'iii']]
    
    [['a', '1', 'i'], ['b', '2', 'ii'], ['c', '3', 'iii']]
    
    [('a', 'b', 'c'), ('1', '2', '3'), ('i', 'ii', 'iii')]
    

    对于一行:

    #flatten the list
    for x in res:
        for y in x:
            flattened_list.append(y)
    
    # print(flattened_list)
    
    print([flattened_list[i:i+3] for i in range(0, len(flattened_list), 3)])
    
    输出:

    [('a', '1', 'i'), ('b', '2', 'ii'), ('c', '3', 'iii')]
    
    [['a' '1' 'i']
     ['b' '2' 'ii']
     ['c' '3' 'iii']]
    
    [['a', '1', 'i'], ['b', '2', 'ii'], ['c', '3', 'iii']]
    
    [('a', 'b', 'c'), ('1', '2', '3'), ('i', 'ii', 'iii')]
    

    正如@norok2所建议的那样

    print(list(zip(*zip(a1, b1, c1))))
    
    输出:

    [('a', '1', 'i'), ('b', '2', 'ii'), ('c', '3', 'iii')]
    
    [['a' '1' 'i']
     ['b' '2' 'ii']
     ['c' '3' 'iii']]
    
    [['a', '1', 'i'], ['b', '2', 'ii'], ['c', '3', 'iii']]
    
    [('a', 'b', 'c'), ('1', '2', '3'), ('i', 'ii', 'iii')]
    

    这将为您提供一个元组列表,这些元组可能不是您想要的:

    >>> list(zip([1,2,3],[4,5,6],[7,8,9]))
    [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
    这将为您提供一个numpy数组:

    >>> from numpy import array
    >>> array([[1,2,3],[4,5,6],[7,8,9]]).transpose()
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
    

    假设您有3个numpy阵列:

    >>> a, b, c = np.random.randint(0, 9, 9).reshape(3, 3)
    >>> print(a, b, c)
    [4 1 4] [5 8 5] [3 0 2]
    
    然后,您可以垂直堆叠它们(即沿第一个维度),然后转置生成的矩阵以获得所需的顺序:

    >>> np.vstack((a, b, c)).T
    array([[4, 5, 3],
           [1, 8, 0],
           [4, 5, 2]])
    
    一个稍微详细一点的示例是水平堆叠,但这需要使用
    重塑
    将数组制作成二维:

    >>> np.hstack((a.reshape(3, 1), b.reshape(3, 1), c.reshape(3, 1)))
    array([[4, 5, 3],
           [1, 8, 0],
           [4, 5, 2]])
    

    如果每个数组中有不同的数据类型,那么使用以下方法是有意义的:

    # Iterative approach, using concat
    import pandas as pd
    my_arrays = [['a', 'b', 'c'], [1, 2, 3], ['i', 'ii', 'iii']]
    df1 = pd.concat([pd.Series(array) for array in my_arrays], axis=1)
    
    # Named arrays
    array1 = ['a', 'b', 'c']
    array2 = [1, 2, 3]
    array3 = ['i', 'ii', 'iii']
    df2 = pd.DataFrame({'col1': array1,
                        'col2': array2,
                        'col3': array3})
    
    现在您有了所需的结构,每个列都有相应的数据类型:

    print(df1)
    #    0  1    2
    # 0  a  1    i
    # 1  b  2   ii
    # 2  c  3  iii
    
    print(df2)
    #   col1  col2 col3
    # 0    a     1    i
    # 1    b     2   ii
    # 2    c     3  iii
    
    print(df1.dtypes)
    # 0    object
    # 1     int64
    # 2    object
    # dtype: object
    
    print(df2.dtypes)
    # col1    object
    # col2     int64
    # col3    object
    # dtype: object
    
    您可以使用
    .values
    属性提取
    numpy
    数组:

    df1.values
    # array([['a', 1, 'i'],
    #        ['b', 2, 'ii'],
    #        ['c', 3, 'iii']], dtype=object)
    

    您可能需要
    zip
    ,我建议您也分享您的代码。目前还不清楚您希望获得什么样的输出,并且您使用的名称表示可能需要也可能不需要的对象的混合。例如,您的输入似乎是异构的(数字、字符串等),您可能在
    列表
    s中有这些输入,但后来您似乎使用了
    numpy
    函数(例如
    dstack
    hstack
    ),这些函数在
    numpy
    数组上运行,这些函数(通常)是异构的,在任何一种情况下,严格的矩阵结构要么不存在(对于
    list
    s),要么被弃用(在
    numpy
    中)。也许,您要寻找的是一种构造表格数据的方法,在这种情况下,我会研究
    pandas
    。我想您是说每个数组都是不同的数据类型?在这种情况下,您应该查看
    pandas
    @Darius modirousta Galian请点击旁边的勾号接受帮助您解决问题的答案,谢谢!转换矩阵式列表的一种更简洁的方法是使用
    zip()
    两次,例如
    list(zip(*zip(a1,b1,c1))
    @norok2 sweet,是的。Added@norok2你现在故意这么做!:P