列表作为python中的列

时间:2017-12-27 14:08:40

标签: python numpy

我有一个列表例如:

x = [1,2,3,4,5]

我想把它转换成一个看起来像这样的矩阵:

mat = [ 1  1  1 
        2  2  2
        3  3  3
        4  4  4
        5  5  5 ]

所以矩阵中的每一列都是列表。

使用numpy还是普通的python有一种简单的方法吗?

谢谢

4 个答案:

答案 0 :(得分:1)

也许你需要重复,即

n = 3 # No of repetition 
np.repeat(np.array(x),n).reshape(-1,n) 

array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])

答案 1 :(得分:0)

没有任何模块

a = [1, 2, 3, 4, 5]
n = 3
b = [[x] * n for x in a]
print(b)

答案 2 :(得分:0)

让我们使用np.tile:

 import numpy as np
 arr = np.array(x)
 np.tile(arr,3).reshape(5,3, order='F')

输出:

array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])

答案 3 :(得分:0)

另一个数组选项:

In [248]: np.stack([a]*3,axis=1)
Out[248]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])

您需要小心列表复制:

In [250]: b=[a]*3
In [251]: b[0][0]=30
In [252]: b
Out[252]: [[30, 2, 3, 4, 5], [30, 2, 3, 4, 5], [30, 2, 3, 4, 5]]
# a is also changed

它复制指针,而不是值。数组栈进行复制。

np.array将沿新的第一轴加入这些列表。 stack执行类似操作(但使用np.concatenate),并允许我们将它们连接到新的第二轴。

In [255]: np.array(b)
Out[255]: 
array([[30,  2,  3,  4,  5],
       [30,  2,  3,  4,  5],
       [30,  2,  3,  4,  5]])