2014-02-26 125 views
1

這是我正在處理的更大問題的一個非常簡單的例子。如何替換二維numpy數組中的多行?例如,我有一個數組...如何用替換列表替換二維numpy數組中的一行?

main_list = array([[ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.]]) 

我有索引列表...

indexes = array([3, 6, 2]) 

我有換人的列表,將永遠是相同長度的列表索引。

substitutions = array([[ 2.4 5.2] 
         [ 10.1 1.3] 
         [ 5.6 9.5]]) 

我想...

main_list = array([[ 0. 0.] 
        [ 0. 0.] 
        [ 5.6 9.5] 
        [ 2.4 5.2] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 10.1 1.3] 
        [ 0. 0.] 
        [ 0. 0.] 
        [ 0. 0.]]) 

現在我做什麼......記住

for i, ind in enumerate(indexes): 
    main_list[ind] = substitutions[i] 

飼養,這是一個簡單的例子,在量產版我所做的所有這些列表的長度將會很大。有沒有更快的方法來做這些替換?謝謝。

回答

2
main_list[indexes,:] = substitutions 

我在定時嘗試說,這是3倍比你貼什麼

In [51]: %%timeit 
for i, ind in enumerate(indexes): 
    main_list[ind] = substitutions[i] 
    ....: 
100000 loops, best of 3: 6.83 us per loop 

In [52]: %timeit main_list[indexes,:] = substitutions 
100000 loops, best of 3: 2.27 us per loop 
+0

哇,這麼簡單的速度更快。我期待着更復雜的東西。 – b10hazard

+0

numpy很棒,就像那個 – Hammer

+0

TIL關於元組切片:-) @Hammer,你是否需要在索引之後的'':''因爲它似乎沒有它的工作...... – Menno