2016-11-10 74 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)