2017-12-27 233 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]])