2017-05-07 143 views
1

我有一個大矩陣(500行×30000列)的零和一個。爲此,我添加了包含0和1之間的值的行501.如果行501中的值對於列x> 0.5,我想用1中的所有零和全部1替換該列中的零。我已經實現代碼如下:如何替換矩陣的指定列中的元素?

for(x in 1:30000){ 
    if (matrix[501,x] > 0.5){ 
    for(y in 1:500){ 
     matrix[matrix[y,x]==1] <- 0 
     matrix[matrix[y,x]==0] <- 1 
    } 
    } 
} 
matrix 

此代碼連續運行,並且我停止它之前已經走了長達2個小時,所以我沒有錯誤消息的報告。我怎樣才能清理它?我究竟做錯了什麼?

+0

您使用的爲O(n^2)算法,此外,循環被設定爲R非常緩慢。閱讀這篇文章http://bigocheatsheet.com/。這會讓您瞭解如何重寫您的代碼 –

+1

還要注意,您的第一條替換線將由您的第二條替換線撤消。 – lmo

+0

謝謝lmo和Kppatel。沒想到,也許我陷入了一個更換的循環。 – Dirigible

回答

3

您可以使用x <- 1 - x將0 - > 1和1 - > 0一起翻轉。

所以,你將不得不

toFlip <- matrix[501,] > 0.5 
matrix[1:500, toFlip] <- 1 - matrix[1:500,toFlip] 
+0

另外'!矩陣[1:500,toFlip]'起作用('!x'翻轉0到1,反之亦然)。 – nicola

+0

我想這取決於你是否想要一個數字或布爾值。 –

相關問題