我有例如列表中的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?
謝謝
我有例如列表中的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?
謝謝
也許你需要重複即
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]])
沒有任何模塊
a = [1, 2, 3, 4, 5]
n = 3
b = [[x] * n for x in a]
print(b)
讓我們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]])
另一個陣列選項:
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]])
您如何知道列數? – MrT
是沒有。的列總是3? – Sanket
'y = [[v for i in range(columns)] for v in x]',其中'columns'是列數,在您的情況下爲3。不是一個'numpy'解決方案。 –