The multiplication of list of matrices












3












$begingroup$


I need to multiply 3 lists of matrices (b.a.b) as the following code



a = {{{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`,
5.298073701591974`}}, {{-17.812203521929003`,
-1.5013126607114478`}, {-1.5013126574896714`,
4.384050851253119`}}, {{-17.801677045750512`,
-1.4055541329078751`}, {-1.405554138172727`,
3.869511752542245`}}};

b = {{{0.8409518416651456`, 0}, {0,
0.1274293000222242`}}, {{0.8409815693580924`, 0}, {0,
0.14187218616724442`}}, {{0.841011296000238`, 0}, {0,
0.15290209433231844`}}};


I used the following:



  mat = b.a.b


But, I think this way is not correct because I didn't get the result. Also, I make a test for the first matrices as the following code, that what I wanted to get for the whole matrices multiplication.



 a1 = {{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`, 5.298073701591974`}};

b1 = {{0.8409518416651456`, 0}, {0, 0.1274293000222242`}};

mat1 = b1.a1.b1


{{-12.6042, -0.177516}, {-0.177516, 0.0860313}}

Thanks.









share|improve this question









$endgroup$








  • 1




    $begingroup$
    Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
    $endgroup$
    – corey979
    Mar 18 at 21:06












  • $begingroup$
    Thanks a lot corey979!
    $endgroup$
    – Ghady
    2 days ago
















3












$begingroup$


I need to multiply 3 lists of matrices (b.a.b) as the following code



a = {{{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`,
5.298073701591974`}}, {{-17.812203521929003`,
-1.5013126607114478`}, {-1.5013126574896714`,
4.384050851253119`}}, {{-17.801677045750512`,
-1.4055541329078751`}, {-1.405554138172727`,
3.869511752542245`}}};

b = {{{0.8409518416651456`, 0}, {0,
0.1274293000222242`}}, {{0.8409815693580924`, 0}, {0,
0.14187218616724442`}}, {{0.841011296000238`, 0}, {0,
0.15290209433231844`}}};


I used the following:



  mat = b.a.b


But, I think this way is not correct because I didn't get the result. Also, I make a test for the first matrices as the following code, that what I wanted to get for the whole matrices multiplication.



 a1 = {{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`, 5.298073701591974`}};

b1 = {{0.8409518416651456`, 0}, {0, 0.1274293000222242`}};

mat1 = b1.a1.b1


{{-12.6042, -0.177516}, {-0.177516, 0.0860313}}

Thanks.









share|improve this question









$endgroup$








  • 1




    $begingroup$
    Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
    $endgroup$
    – corey979
    Mar 18 at 21:06












  • $begingroup$
    Thanks a lot corey979!
    $endgroup$
    – Ghady
    2 days ago














3












3








3





$begingroup$


I need to multiply 3 lists of matrices (b.a.b) as the following code



a = {{{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`,
5.298073701591974`}}, {{-17.812203521929003`,
-1.5013126607114478`}, {-1.5013126574896714`,
4.384050851253119`}}, {{-17.801677045750512`,
-1.4055541329078751`}, {-1.405554138172727`,
3.869511752542245`}}};

b = {{{0.8409518416651456`, 0}, {0,
0.1274293000222242`}}, {{0.8409815693580924`, 0}, {0,
0.14187218616724442`}}, {{0.841011296000238`, 0}, {0,
0.15290209433231844`}}};


I used the following:



  mat = b.a.b


But, I think this way is not correct because I didn't get the result. Also, I make a test for the first matrices as the following code, that what I wanted to get for the whole matrices multiplication.



 a1 = {{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`, 5.298073701591974`}};

b1 = {{0.8409518416651456`, 0}, {0, 0.1274293000222242`}};

mat1 = b1.a1.b1


{{-12.6042, -0.177516}, {-0.177516, 0.0860313}}

Thanks.









share|improve this question









$endgroup$




I need to multiply 3 lists of matrices (b.a.b) as the following code



a = {{{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`,
5.298073701591974`}}, {{-17.812203521929003`,
-1.5013126607114478`}, {-1.5013126574896714`,
4.384050851253119`}}, {{-17.801677045750512`,
-1.4055541329078751`}, {-1.405554138172727`,
3.869511752542245`}}};

b = {{{0.8409518416651456`, 0}, {0,
0.1274293000222242`}}, {{0.8409815693580924`, 0}, {0,
0.14187218616724442`}}, {{0.841011296000238`, 0}, {0,
0.15290209433231844`}}};


I used the following:



  mat = b.a.b


But, I think this way is not correct because I didn't get the result. Also, I make a test for the first matrices as the following code, that what I wanted to get for the whole matrices multiplication.



 a1 = {{-17.8227277373099`, -1.6565234964560602`}, 
{-1.6565234954649242`, 5.298073701591974`}};

b1 = {{0.8409518416651456`, 0}, {0, 0.1274293000222242`}};

mat1 = b1.a1.b1


{{-12.6042, -0.177516}, {-0.177516, 0.0860313}}

Thanks.






list-manipulation matrix






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 18 at 20:56









GhadyGhady

696




696








  • 1




    $begingroup$
    Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
    $endgroup$
    – corey979
    Mar 18 at 21:06












  • $begingroup$
    Thanks a lot corey979!
    $endgroup$
    – Ghady
    2 days ago














  • 1




    $begingroup$
    Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
    $endgroup$
    – corey979
    Mar 18 at 21:06












  • $begingroup$
    Thanks a lot corey979!
    $endgroup$
    – Ghady
    2 days ago








1




1




$begingroup$
Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
$endgroup$
– corey979
Mar 18 at 21:06






$begingroup$
Table[b[[i]].a[[i]].b[[i]], {i, 1, 3}] or #[[2]].#[[1]].#[[2]] & /@ Transpose[{a, b}].
$endgroup$
– corey979
Mar 18 at 21:06














$begingroup$
Thanks a lot corey979!
$endgroup$
– Ghady
2 days ago




$begingroup$
Thanks a lot corey979!
$endgroup$
– Ghady
2 days ago










2 Answers
2






active

oldest

votes


















8












$begingroup$

Using MapThread and Dot:



MapThread[Dot, {b, a, b}]





share|improve this answer









$endgroup$













  • $begingroup$
    Thank you very much, It is the easiest!
    $endgroup$
    – Ghady
    2 days ago



















6












$begingroup$

If you need it really fast, then use Compile:



n = 1000000;
a = RandomReal[{-1, 1}, {n, 2, 2}];
b = RandomReal[{-1, 1}, {n, 2, 2}];

cf = Compile[{{a, _Real, 2}, {b, _Real, 2}},
b.a.b,
RuntimeAttributes -> Listable,
Parallelization -> True
];

MapThread[Dot, {b, a, b}]; // AbsoluteTiming // First
cf[a, b]; // AbsoluteTiming // First



1.46343



0.075722







share|improve this answer











$endgroup$













  • $begingroup$
    Thank you very much!
    $endgroup$
    – Ghady
    2 days ago










  • $begingroup$
    You're welcome.
    $endgroup$
    – Henrik Schumacher
    2 days ago











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193512%2fthe-multiplication-of-list-of-matrices%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









8












$begingroup$

Using MapThread and Dot:



MapThread[Dot, {b, a, b}]





share|improve this answer









$endgroup$













  • $begingroup$
    Thank you very much, It is the easiest!
    $endgroup$
    – Ghady
    2 days ago
















8












$begingroup$

Using MapThread and Dot:



MapThread[Dot, {b, a, b}]





share|improve this answer









$endgroup$













  • $begingroup$
    Thank you very much, It is the easiest!
    $endgroup$
    – Ghady
    2 days ago














8












8








8





$begingroup$

Using MapThread and Dot:



MapThread[Dot, {b, a, b}]





share|improve this answer









$endgroup$



Using MapThread and Dot:



MapThread[Dot, {b, a, b}]






share|improve this answer












share|improve this answer



share|improve this answer










answered Mar 18 at 21:21









swishswish

4,1761535




4,1761535












  • $begingroup$
    Thank you very much, It is the easiest!
    $endgroup$
    – Ghady
    2 days ago


















  • $begingroup$
    Thank you very much, It is the easiest!
    $endgroup$
    – Ghady
    2 days ago
















$begingroup$
Thank you very much, It is the easiest!
$endgroup$
– Ghady
2 days ago




$begingroup$
Thank you very much, It is the easiest!
$endgroup$
– Ghady
2 days ago











6












$begingroup$

If you need it really fast, then use Compile:



n = 1000000;
a = RandomReal[{-1, 1}, {n, 2, 2}];
b = RandomReal[{-1, 1}, {n, 2, 2}];

cf = Compile[{{a, _Real, 2}, {b, _Real, 2}},
b.a.b,
RuntimeAttributes -> Listable,
Parallelization -> True
];

MapThread[Dot, {b, a, b}]; // AbsoluteTiming // First
cf[a, b]; // AbsoluteTiming // First



1.46343



0.075722







share|improve this answer











$endgroup$













  • $begingroup$
    Thank you very much!
    $endgroup$
    – Ghady
    2 days ago










  • $begingroup$
    You're welcome.
    $endgroup$
    – Henrik Schumacher
    2 days ago
















6












$begingroup$

If you need it really fast, then use Compile:



n = 1000000;
a = RandomReal[{-1, 1}, {n, 2, 2}];
b = RandomReal[{-1, 1}, {n, 2, 2}];

cf = Compile[{{a, _Real, 2}, {b, _Real, 2}},
b.a.b,
RuntimeAttributes -> Listable,
Parallelization -> True
];

MapThread[Dot, {b, a, b}]; // AbsoluteTiming // First
cf[a, b]; // AbsoluteTiming // First



1.46343



0.075722







share|improve this answer











$endgroup$













  • $begingroup$
    Thank you very much!
    $endgroup$
    – Ghady
    2 days ago










  • $begingroup$
    You're welcome.
    $endgroup$
    – Henrik Schumacher
    2 days ago














6












6








6





$begingroup$

If you need it really fast, then use Compile:



n = 1000000;
a = RandomReal[{-1, 1}, {n, 2, 2}];
b = RandomReal[{-1, 1}, {n, 2, 2}];

cf = Compile[{{a, _Real, 2}, {b, _Real, 2}},
b.a.b,
RuntimeAttributes -> Listable,
Parallelization -> True
];

MapThread[Dot, {b, a, b}]; // AbsoluteTiming // First
cf[a, b]; // AbsoluteTiming // First



1.46343



0.075722







share|improve this answer











$endgroup$



If you need it really fast, then use Compile:



n = 1000000;
a = RandomReal[{-1, 1}, {n, 2, 2}];
b = RandomReal[{-1, 1}, {n, 2, 2}];

cf = Compile[{{a, _Real, 2}, {b, _Real, 2}},
b.a.b,
RuntimeAttributes -> Listable,
Parallelization -> True
];

MapThread[Dot, {b, a, b}]; // AbsoluteTiming // First
cf[a, b]; // AbsoluteTiming // First



1.46343



0.075722








share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago

























answered Mar 18 at 23:36









Henrik SchumacherHenrik Schumacher

57.4k578158




57.4k578158












  • $begingroup$
    Thank you very much!
    $endgroup$
    – Ghady
    2 days ago










  • $begingroup$
    You're welcome.
    $endgroup$
    – Henrik Schumacher
    2 days ago


















  • $begingroup$
    Thank you very much!
    $endgroup$
    – Ghady
    2 days ago










  • $begingroup$
    You're welcome.
    $endgroup$
    – Henrik Schumacher
    2 days ago
















$begingroup$
Thank you very much!
$endgroup$
– Ghady
2 days ago




$begingroup$
Thank you very much!
$endgroup$
– Ghady
2 days ago












$begingroup$
You're welcome.
$endgroup$
– Henrik Schumacher
2 days ago




$begingroup$
You're welcome.
$endgroup$
– Henrik Schumacher
2 days ago


















draft saved

draft discarded




















































Thanks for contributing an answer to Mathematica Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193512%2fthe-multiplication-of-list-of-matrices%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Plaza Victoria

In PowerPoint, is there a keyboard shortcut for bulleted / numbered list?

How to put 3 figures in Latex with 2 figures side by side and 1 below these side by side images but in...