2016-11-10 44 views
0

我試圖形成一個被稱爲new_matrix使用值從列表的Python:添加新行值矩陣

similair = [1,2,3] 
indices=[[0 2] 
     [1 2] 
     [2 1]] 


new_matrix = np.array([]) 
for list in indices: 
    newrow=[] 
    for number in list: 
     newrow.append(similair[number]) 
    new_matrix.vstack((new_matrix, np.array(newrow))) 

print new_matrix 

期望出的清單新的矩陣把

values 
    [1,3] 
    [2,3] 
    [3,2] 

但是我得到的以下錯誤

new_matrix.vstack((new_matrix, np.array(newrow)))

AttributeError: 'numpy.ndarray' object has no attribute 'vstack'

+0

錯誤告訴你, e對象'new_matrix'(這是一個numpy數組)沒有叫做'vstack'的方法。這是因爲'vstack'是一個你可以像'np.vstack'一樣訪問的numpy函數。 – piRSquared

回答

4

採用先進的整數索引(introreference):

import numpy as np 
similair = np.array([1,2,3]) 
indices=np.array([[0, 2], 
        [1, 2], 
        [2, 1]]) 
new_matrix = similair[indices] 
print(new_matrix) 

產生

[[1 3] 
[2 3] 
[3 2]] 
+0

感謝您的建議,但我希望列表中的每個值都在一個新行上 –

+1

您可以執行以下操作:對於結果中的項目:print(item) –

+0

@Mark Hannel確實可以做到這一點,但我想要進一步使用我構建的矩陣 –

0

您可以構建矩陣如下

similair = [1,2,3] 
indices=[[0 2] 
     [1 2] 
     [2 1]] 
new_matrix = [[similar[i] for i in index] for index in indices] 

如果你想new_matrix是一個numpy的數組,你可以只使用array命令

import numpy as np 
new_matrix = np.array(new_matrix)