我有一个列表例如:
x = [1,2,3,4,5]
我想把它转换成一个看起来像这样的矩阵:
mat = [ 1 1 1
2 2 2
3 3 3
4 4 4
5 5 5 ]
所以矩阵中的每一列都是列表。
使用numpy还是普通的python有一种简单的方法吗?
谢谢
答案 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]])