2017-09-25 150 views
-1

我想爲下面每行的特定列編號。 d是類似於(embedding_id x n_vocab)t的數據是正確embedding_id的列表。numpy中每一行的特定列

然後,我可以創建result像下面一樣。數據很好,但我認爲這並不聰明。如何以其他智能方式創建result

t = np.random.randint(10, size=(32,))           
d = np.random.randn(30, 32)              

result = []                  
for a,b in zip(d.transpose(), t):            
    print(a[b])                 
    result.append(a[b]) # I don't think this is good way             
result = np.array(result).astype(float)           
print(result)                 
print(result.shape) # (32,). 

回答

3

你可以這樣index;使用numpy.arrange創建列索引,並與t使用它(這就是所謂的高級索引):

d[t, np.arange(len(t))] 

(d[t, np.arange(len(t))] == result).all() 
# True 
+0

這是偉大的。可以肯定的是,第一個元素「t」是一個特定的列號,第二個元素是特定的行。所以我想要做的是爲每一行提取特定列的值。我會接受你的回答。謝謝! – jef

+0

你的理解是正確的。除了我會說't'是行索引,而第二個列索引按照慣例。 – Psidom

相關問題