2017-12-27 43 views
-2

我有例如列表中的Python专栏:列表,

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

您如何知道列数? – MrT

+0

是没有。的列总是3? – Sanket

+1

'y = [[v for i in range(columns)] for v in x]',其中'columns'是列数,在您的情况下为3。不是一个'numpy'解决方案。 –

回答

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]]) 
0

没有任何模块

a = [1, 2, 3, 4, 5] 
n = 3 
b = [[x] * n for x in a] 
print(b) 
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]]) 
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]])