Xavier Fernández i Marín
2011-Sep-13 07:34 UTC
[R] Matrix multiplication gives different results some of the times (NaN)
Dear all, When trying to multiply the same matrices repeatedly I get different results some of the times. It is not systematic, which is the fact that is giving me more trouble to try to isolate the problem. Basically I am doing X %*% B, where X is a Nx2 matrix and B is a vector with 2 values. I have the impression (by exploration) that when N<41 the problem appears randomly, whereas for for N<41, it has not appeared any time. When I run a loop with, say, 1000 times doing the same operation, some of the times the resulting matrix has some "NaN" into it. Here it goes some code that fails: -----8<--------------- B <- c(0, 4.9039) X <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -0.171208033350785, 2.05470005817641, -2.41795651834092, -0.258302488807007, -2.33857441602606, 0.628992894509171, 3.17491552278606, -1.44233071945946, 3.15785975396147, -1.99816867735392, 2.86344423987462, -5.271325440284, -2.0312296185407, -3.60192700841448, 3.38189039590051, -3.24639622163501, 0.284327647745153, -0.262087980902988, -3.7659454179588, 0.684967001574538, 3.0772201853168, 5.17600286245534, 1.04626227787207, 3.70446276942422, -0.0396039716160263, -0.657289365686855, -1.05808995826547, -1.93203623162131, -0.0884561017666723, -2.93790617275895, -0.215434948253912, 4.98439842853693, 2.91447973684786, -1.29993065167532, -4.66018971623614, -6.64275130324818, -5.21531940416414, 0.479257350317855, -1.96095587405884, 1.08909073077384, 1.28904309721095, 1.11327650673847, -0.022977620181631, 3.29959801979137, -2.23876825868105), .Dim = c(45L, 2L), .Dimnames = list( NULL, c("", "x"))) for (i in 1:1000) { M <- X %*% B w <- which(is.nan(M)) l <- length(w) if (l!=0) { print(paste("Length", l, "error(s) on", X[w,2], sep=" ")) } } -----8<--------------- It gives several errors with variable length and on similar positions. I am using R-2.13.1 under Gentoo Linux -----8<---------------> versionplatform x86_64-pc-linux-gnu arch x86_64 os linux-gnu system x86_64, linux-gnu status major 2 minor 13.1 year 2011 month 07 day 08 svn rev 56322 language R version.string R version 2.13.1 (2011-07-08) -----8<--------------- -----8<---------------> sessionInfo()R version 2.13.1 (2011-07-08) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=ca_AD.UTF-8 LC_NUMERIC=C LC_TIME=ca_AD.UTF-8 [4] LC_COLLATE=C LC_MONETARY=C LC_MESSAGES=ca_AD.UTF-8 [7] LC_PAPER=ca_AD.UTF-8 LC_NAME=C LC_ADDRESS=C [10] LC_TELEPHONE=C LC_MEASUREMENT=ca_AD.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] tools_2.13.1 -----8<--------------- Thank you, -- - Xavier -
Joshua Wiley
2011-Sep-13 07:54 UTC
[R] Matrix multiplication gives different results some of the times (NaN)
I cannot replicate this on, even with 1 milllion reps on: R version 2.13.1 (2011-07-08) Platform: i386-pc-mingw32/i386 (32-bit) or R Under development (unstable) (2011-08-13 r56733) Platform: x86_64-pc-mingw32/x64 (64-bit) Perhaps it is OS dependent (I am away from my linux box at the moment)? Josh 2011/9/13 Xavier Fern?ndez i Mar?n <xfim.ll at gmail.com>:> Dear all, > > When trying to multiply the same matrices repeatedly I get different > results some of the times. > > It is not systematic, which is the fact that is giving me more trouble to > try to isolate the problem. > > Basically I am doing X %*% B, where X is a Nx2 matrix and B is a vector > with 2 values. I have the impression (by exploration) that when N<41 the > problem appears randomly, whereas for for N<41, it has not appeared any > time. > > > When I run a loop with, say, 1000 times doing the same operation, some of > the times the resulting matrix has some "NaN" into it. > > > Here it goes some code that fails: > > -----8<--------------- > B <- c(0, 4.9039) > > X <- > structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, > 1, 1, 1, 1, 1, 1, 1, -0.171208033350785, 2.05470005817641, -2.41795651834092, > -0.258302488807007, -2.33857441602606, 0.628992894509171, 3.17491552278606, > -1.44233071945946, 3.15785975396147, -1.99816867735392, 2.86344423987462, > -5.271325440284, -2.0312296185407, -3.60192700841448, 3.38189039590051, > -3.24639622163501, 0.284327647745153, -0.262087980902988, -3.7659454179588, > 0.684967001574538, 3.0772201853168, 5.17600286245534, 1.04626227787207, > 3.70446276942422, -0.0396039716160263, -0.657289365686855, -1.05808995826547, > -1.93203623162131, -0.0884561017666723, -2.93790617275895, -0.215434948253912, > 4.98439842853693, 2.91447973684786, -1.29993065167532, -4.66018971623614, > -6.64275130324818, -5.21531940416414, 0.479257350317855, -1.96095587405884, > 1.08909073077384, 1.28904309721095, 1.11327650673847, -0.022977620181631, > 3.29959801979137, -2.23876825868105), .Dim = c(45L, 2L), .Dimnames = list( > ? ?NULL, c("", "x"))) > > > for (i in 1:1000) { > ?M <- X %*% B > ?w <- which(is.nan(M)) > ?l <- length(w) > ?if (l!=0) { > ? ?print(paste("Length", l, "error(s) on", X[w,2], sep=" ")) > ?} > } > > -----8<--------------- > > It gives several errors with variable length and on similar positions. > > > > > > I am using R-2.13.1 under Gentoo Linux > -----8<--------------- >> version > platform ? ? ? x86_64-pc-linux-gnu > arch ? ? ? ? ? x86_64 > os ? ? ? ? ? ? linux-gnu > system ? ? ? ? x86_64, linux-gnu > status > major ? ? ? ? ?2 > minor ? ? ? ? ?13.1 > year ? ? ? ? ? 2011 > month ? ? ? ? ?07 > day ? ? ? ? ? ?08 > svn rev ? ? ? ?56322 > language ? ? ? R > version.string R version 2.13.1 (2011-07-08) > -----8<--------------- > > -----8<--------------- >> sessionInfo() > R version 2.13.1 (2011-07-08) > Platform: x86_64-pc-linux-gnu (64-bit) > > locale: > ?[1] LC_CTYPE=ca_AD.UTF-8 ? ? ? LC_NUMERIC=C ? ? ? ? ? ? ? LC_TIME=ca_AD.UTF-8 > ?[4] LC_COLLATE=C ? ? ? ? ? ? ? LC_MONETARY=C ? ? ? ? ? ? ?LC_MESSAGES=ca_AD.UTF-8 > ?[7] LC_PAPER=ca_AD.UTF-8 ? ? ? LC_NAME=C ? ? ? ? ? ? ? ? ?LC_ADDRESS=C > ?[10] LC_TELEPHONE=C ? ? ? ? ? ?LC_MEASUREMENT=ca_AD.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] stats ? ? graphics ?grDevices utils ? ? datasets ?methods ? base > > loaded via a namespace (and not attached): > [1] tools_2.13.1 > > -----8<--------------- > > Thank you, > > -- > - ?Xavier ?- > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Joshua Wiley Ph.D. Student, Health Psychology Programmer Analyst II, ATS Statistical Consulting Group University of California, Los Angeles https://joshuawiley.com/
Xavier Fernández i Marín
2011-Sep-13 08:07 UTC
[R] Matrix multiplication gives different results some of the times (NaN)
Joshua Wiley vas escriure el dia dt, 13 set 2011:> I cannot replicate this on, even with 1 milllion reps on: > > R version 2.13.1 (2011-07-08) > Platform: i386-pc-mingw32/i386 (32-bit) > > or > > R Under development (unstable) (2011-08-13 r56733) > Platform: x86_64-pc-mingw32/x64 (64-bit) > > Perhaps it is OS dependent (I am away from my linux box at the moment)?Yes, this was my first guess, since I compiled R with aggressive options (-Ofast) in GCC 4.6. But then I tried also with the recommended -O2, and recompiled blas and lapack as well, just in case it was something related to some of their routines. But I am still having problems. Thank you, -- - Xavier -