如何从python中的列表创建矩阵或2d列表?

时间:2017-11-04 15:45:04

标签: python python-2.7 numpy

我有3个列表

> a= ones((10,1))
> 
> 
>  x_1=[1,2,3,4...,10] (i.e. list of 10 elements)
> 
>  y_1=[2,1,4,7,2,..20] (list of 10 elements)

我想加入这3个列表并将其作为2d列表或矩阵 为:

> mat=[a x_1 y_1]
像在MATLAB中一样 a将是1列 x_1第二列和 y_1第三栏。

> mat= [[1,1,2],[1,2,1],[1,3,4],[]......[]]

我试过

> np.matrix([[a,[[i] for i in x_1],[[i] for i in y_1]]])

但它给出了一个错误,因为矩阵必须是2维度

我该怎么做?

另外,如果我有2D数组 即。

>  a=np.ones((3,2))
> 
> x_1=[[1,2],[2,3],[2,4]]
> 
> y_1=[[3,4],[5,6],[3,4]]

然后我如何连接这些数组并使其成为

> c=[[1,1,2,3,4],[1,2,3,5,6],[1,2,4,3,4]]

在matlab中,它写成:

> c=[a,x_1,y_1]

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

python中的2D列表与MATLAB中的不同!

如果我有两个列表

A = ["red", "green", "blue"]
B = ["orange", "yellow", "purple"]

我想从这两个中创建一个2D列表,我可以写一下:

C = [A, B]

然后,C等于[[" red"," green"," blue"],[" orange", "黄色","紫色"]]

我可以访问C的元素,例如:

C[0][1]
>> "red"
C[1][2]
>> "purple"
C[0]
>> ["red", "green", "blue"]

要回答您的具体问题,您需要列出x_1和y_1,并且要创建mat,即包含x_1和y_1的2D列表。你可以写,

mat = [x_1 y_1]

此列表为2x10。您想要转置此列表,因此您应该能够使用zip来执行:

mat = map(list, zip(*mat))

答案 1 :(得分:1)

如果你想留在“标准”Python(没有numpy),那么要获得转置的2D列表,你可以做到以下几点:

mat = [p for p in zip(a, x_1, y_1)]

如果您还需要numpy数组,那么:

import numpy as np
mat = np.array([a, x_1, y_1]).T

注意:在上面的示例中,将np.array替换为np.matrix,如果这是您想要的。

如果您的a数组是2D数组,例如np.ones((10,1))np.ones((10,3)),那么您可以使用numpy中的* stack()函数之一:

mat = np.vstack([np.asarray(a).T, x_1, y_1]).T