2010-10-07 102 views
1

我試圖在20x20矩陣中找到2位數字的最大對角乘積。R或R中的for循環 - 計算矩陣的對角乘積

這給出了一個錯誤信息:

i <- 17:1 
z <- for (j in 1:(18-i)) 
     {b <- max ((x[i,j]*x[i+1,j+1]*x[i+2,j+2]*x[i+3,j+3]))}} 

但這並不:

z <- for (i <- 17:1) 
{for (j in 1:(18-i)) 
     {b <- max ((x[i,j]*x[i+1,j+1]*x[i+2,j+2]*x[i+3,j+3]))}} 

但第二個版本給了我一個號碼太小。爲什麼第一個不工作,我認爲它會產生正確的答案,但我不明白錯誤信息。

+0

http://www.philender.com/courses/multivariate/notes/matr.html和max() – 2010-10-07 17:55:39

+0

實際上,您的解決方案都不起作用。我編輯了您的條目以更好地反映您的問題。如果您不同意,請回滾。 – 2010-10-08 10:17:47

回答

6

這看起來不對。

您無法將for循環的結果賦值給變量。而max()是一個標量變量,這是無稽之談。最後,未指定矩陣x。我會用更小的東西重試,甚至可能會打印一些臨時結果。

走之前跑步還是很好的建議。稍後,您仍然可以爲sprint解決方案進行矢量化。

+0

不會是一個向量,從哪個最大值可以給出最大值? – user446667 2010-10-07 18:02:18

+0

另外,爲了獲取數據,我使用了read.table(「filename」),所以我不確定它是否是矩陣形式或任何表格。 – user446667 2010-10-07 18:04:01

+0

好吧,這是一個數據幀 - 難以處理數據幀或矩陣? – user446667 2010-10-07 18:05:46

1

實際上,與德克相反,我相信你應該儘早知道R中的矢量化。您嘗試實現的循環結構遠非最佳,實際上是多餘的。只有在非常特殊的情況下才能使用for循環。檢查this question的討論。查看便利功能的幫助文件,如diag(),combn(),prod()apply()

很容易將它們結合起來,做你想做的:

x <-matrix(1:400,ncol=20) 

Diag <- diag(x) 

Id <- combn(1:length(Diag),2) 

Diag.prod <- apply(matrix(Diag[Id],ncol=2),1,prod) 

Max.Diag.prod <- max(Diag.prod) 

編輯:您使用的數據幀,但您可以使用as.matrix(x)輕鬆地將其轉換爲一個矩陣。