eugen pircalabelu
2015-Oct-26 12:39 UTC
[R] elementwise matrix multiplication with a special structure
Hello again,
Thanks for your reply and sorry for my own late reply! ?I am writing from a
normal yahoo account so i don't know why it behaves like this. I was looking
to avoid the expand.grid command because my matrices are of size 800x800 (i have
some filters that exclude out some elements, so i don't need to pass by
everything, but still) which is quickly too heavy for R but still doable in C.?
Thanks a lot and have ?a great day ahead!Eugen
From: David L Carlson <dcarlson at tamu.edu>
To: eugen pircalabelu <eugen_pircalabelu at yahoo.com>
Sent: Friday, October 23, 2015 9:21 PM
Subject: RE: [R] elementwise matrix multiplication with a special structure
Don't use html formatted emails. The r-help server strips the html
formatting leaving us the the mess you see below.
You don't need any loops:
> aa <- matrix(1:9, 3, 3)
> bb <- aa * 10
> cc <- bb * 10
> x <- as.matrix(expand.grid(k=1:3, j=1:3, c=1:3, r=1:3))
> str(x)
int [1:81, 1:4] 1 2 3 1 2 3 1 2 3 1 ...
- attr(*, "dimnames")=List of 2
? ..$ : NULL
? ..$ : chr [1:4] "k" "j" "c"
"r"> dd <- aa[x[, c("j", "k")]] * bb[x[, c("r",
"j")]] * cc[x[, c("k", "c")]]
> dd
[1]? 1000? 8000? 21000? 8000? 40000? 96000? 21000? 84000 189000
[10]? 4000? 20000? 42000? 32000 100000 192000? 84000 210000 378000
[19]? 7000? 32000? 63000? 56000 160000 288000 147000 336000 567000
[28]? 2000? 16000? 42000? 10000? 50000 120000? 24000? 96000 216000
[37]? 8000? 40000? 84000? 40000 125000 240000? 96000 240000 432000
[46]? 14000? 64000 126000? 70000 200000 360000 168000 384000 648000
[55]? 3000? 24000? 63000? 12000? 60000 144000? 27000 108000 243000
[64]? 12000? 60000 126000? 48000 150000 288000 108000 270000 486000
[73]? 21000? 96000 189000? 84000 240000 432000 189000 432000 729000
# Or a bit more compactly> dd <- aa[x[, c(2, 1)]] * bb[x[, c(4, 2)]] * cc[x[, c(1, 3)]]
-------------------------------------
David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77840-4352
-----Original Message-----
From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of eugen
pircalabelu via R-help
Sent: Friday, October 23, 2015 12:31 PM
To: r-help at r-project.org
Subject: [R] elementwise matrix multiplication with a special structure
Hello R users,
I have the following annoying matrix multiplication and I do not know how to
avoid the nested loops, so maybe someone can help me with some ideas. I have
searched the forum for past posts but nothing came up.Here it is:
?aa=matrix(1:9,3,3)?bb=matrix(seq(10,90,by=10),3,3)?cc=matrix(seq(100,900,
by=100),3,3)?dd=NULL
for(r in 1:3){????for(c in 1:3){????????for(j in 1:3){????????????for(k in
1:3){dd=c(dd,aa[j,k]*bb[r,j]*cc[k,c])}}}}dd?[1] ? 1000 ? 8000 ?21000 ? 8000
?40000 ?96000 ?21000 ?84000 189000 ? 4000[11] ?20000 ?42000 ?32000 100000 192000
?84000 210000 378000 ? 7000 ?32000[21] ?63000 ?56000 160000 288000 147000 336000
567000 ? 2000 ?16000 ?42000[31] ?10000 ?50000 120000 ?24000 ?96000 216000 ? 8000
?40000 ?84000 ?40000[41] 125000 240000 ?96000 240000 432000 ?14000 ?64000 126000
?70000 200000[51] 360000 168000 384000 648000 ? 3000 ?24000 ?63000 ?12000 ?60000
144000[61] ?27000 108000 243000 ?12000 ?60000 126000 ?48000 150000 288000
108000[71] 270000 486000 ?21000 ?96000 189000 ?84000 240000 432000 189000
432000[81] 729000
What I want to obtain is the content of the vector dd in an efficient (fast) and
clever way.Thank you very much and have a great day ahead!Eugen
??? [[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.
[[alternative HTML version deleted]]