2013-05-22 76 views
1

所以我今天是編碼了的東西,我想,以取代在0調用此矩陣B.嗯,這是沒有問題的矩陣中的所有負值,我只是寫在矩陣更換負數零

B[which(B<0)]=0 

但後來只是因爲我很好奇,我想知道,如果我們擺脫了它的什麼,寫

B[B<0]=0 

讓我吃驚,這也給了相同的答案。如果我會在堆棧溢出中查找這個問題,第二個答案是非常標準的(並且有更復雜的更快的方法),但是我的問題是:上面的兩個方法實際上是相同的嗎? B < 0返回一個布爾矩陣。哪種方法更快,爲什麼?

+1

哪種方法效果最好視情況而定。例如,如果你有一個很大的數據框,你只能選擇幾行,那麼使用'which'通常會更快。我認爲這是因爲直接將這些行從父對象中拉出比檢查每一行以查看它是否符合條件更有效。 –

+0

這是我正在尋找的答案類型!我懷疑這不是泰勒根據我的速度測試所建議的那麼簡單。 – MHH

回答

2

至於速度問題,在我嘗試的測試中似乎沒有很大的差異。例如,

B=.5-matrix(runif(10000),100,100) 

start = Sys.time() 
replicate(50000,B[B<0]) 
speed = Sys.time() - start 

25.85秒

start = Sys.time() 
replicate(50000,B[which(B<0)]) 
speed = Sys.time() - start 

25.91秒