how to sort the expression not based on the Heads in Times?












4












$begingroup$


Is there any way i can sort the following expression ?



a[k, l] b[i, j]


so that i would have:



b[i, j] a[k,l]


Mathematica does the ordering based on the heads. is there anyway to change it ?










share|improve this question











$endgroup$












  • $begingroup$
    To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
    $endgroup$
    – High Performance Mark
    Feb 7 at 15:33










  • $begingroup$
    @High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
    $endgroup$
    – user49047
    Feb 7 at 16:15






  • 1




    $begingroup$
    The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
    $endgroup$
    – Sjoerd Smit
    Feb 7 at 16:15










  • $begingroup$
    Inactive[Times] @@ SortBy[List @@ expr, First]
    $endgroup$
    – Bob Hanlon
    Feb 7 at 16:29
















4












$begingroup$


Is there any way i can sort the following expression ?



a[k, l] b[i, j]


so that i would have:



b[i, j] a[k,l]


Mathematica does the ordering based on the heads. is there anyway to change it ?










share|improve this question











$endgroup$












  • $begingroup$
    To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
    $endgroup$
    – High Performance Mark
    Feb 7 at 15:33










  • $begingroup$
    @High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
    $endgroup$
    – user49047
    Feb 7 at 16:15






  • 1




    $begingroup$
    The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
    $endgroup$
    – Sjoerd Smit
    Feb 7 at 16:15










  • $begingroup$
    Inactive[Times] @@ SortBy[List @@ expr, First]
    $endgroup$
    – Bob Hanlon
    Feb 7 at 16:29














4












4








4





$begingroup$


Is there any way i can sort the following expression ?



a[k, l] b[i, j]


so that i would have:



b[i, j] a[k,l]


Mathematica does the ordering based on the heads. is there anyway to change it ?










share|improve this question











$endgroup$




Is there any way i can sort the following expression ?



a[k, l] b[i, j]


so that i would have:



b[i, j] a[k,l]


Mathematica does the ordering based on the heads. is there anyway to change it ?







sorting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 8 at 11:18







user49047

















asked Feb 7 at 15:08









user49047user49047

405213




405213












  • $begingroup$
    To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
    $endgroup$
    – High Performance Mark
    Feb 7 at 15:33










  • $begingroup$
    @High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
    $endgroup$
    – user49047
    Feb 7 at 16:15






  • 1




    $begingroup$
    The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
    $endgroup$
    – Sjoerd Smit
    Feb 7 at 16:15










  • $begingroup$
    Inactive[Times] @@ SortBy[List @@ expr, First]
    $endgroup$
    – Bob Hanlon
    Feb 7 at 16:29


















  • $begingroup$
    To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
    $endgroup$
    – High Performance Mark
    Feb 7 at 15:33










  • $begingroup$
    @High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
    $endgroup$
    – user49047
    Feb 7 at 16:15






  • 1




    $begingroup$
    The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
    $endgroup$
    – Sjoerd Smit
    Feb 7 at 16:15










  • $begingroup$
    Inactive[Times] @@ SortBy[List @@ expr, First]
    $endgroup$
    – Bob Hanlon
    Feb 7 at 16:29
















$begingroup$
To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
$endgroup$
– High Performance Mark
Feb 7 at 15:33




$begingroup$
To be clear: you are seeking a way to sort the elements of that expression based on the lexicographical ordering of the arguments to those elements ?
$endgroup$
– High Performance Mark
Feb 7 at 15:33












$begingroup$
@High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
$endgroup$
– user49047
Feb 7 at 16:15




$begingroup$
@High Performance Mark i want to order the expression based on their arguments rather than the heads. so if i have a[m,n] b[i,j] c[k,l] i want it to be like b[i,j] c[k,l] a[m,n]
$endgroup$
– user49047
Feb 7 at 16:15




1




1




$begingroup$
The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
$endgroup$
– Sjoerd Smit
Feb 7 at 16:15




$begingroup$
The expression you show here has head Times: spaces are interpreted as multiplication (use FullForm to check if you're unsure). Times is a symbol with the attribute Orderless, meaning that it will always sort its arguments in canonical order. The only way to have something close to what you want is Inactivate[b[i, j] a[k, l], Times]
$endgroup$
– Sjoerd Smit
Feb 7 at 16:15












$begingroup$
Inactive[Times] @@ SortBy[List @@ expr, First]
$endgroup$
– Bob Hanlon
Feb 7 at 16:29




$begingroup$
Inactive[Times] @@ SortBy[List @@ expr, First]
$endgroup$
– Bob Hanlon
Feb 7 at 16:29










2 Answers
2






active

oldest

votes


















5












$begingroup$

with the help of Bob Hanlon:



axx = HoldForm[
NonCommutativeMultiply @@
SortBy[List @@ (a[k, l] b[i, j]), First]] // ReleaseHold

axx //. NonCommutativeMultiply[a_, Y___] :> HoldForm[Times[a, Y]]





share|improve this answer









$endgroup$





















    0












    $begingroup$

    SortBy[Inactivate[a[m, n] b[i, j] c[k, l], Times], Function[x, #[[x]]]/@ Range[Length@#]&] /.
    Inactive[Times] -> HoldForm@*Times



    b[i,j] c[k,l] a[m,n]







    share|improve this answer









    $endgroup$














      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%2f191068%2fhow-to-sort-the-expression-not-based-on-the-heads-in-times%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









      5












      $begingroup$

      with the help of Bob Hanlon:



      axx = HoldForm[
      NonCommutativeMultiply @@
      SortBy[List @@ (a[k, l] b[i, j]), First]] // ReleaseHold

      axx //. NonCommutativeMultiply[a_, Y___] :> HoldForm[Times[a, Y]]





      share|improve this answer









      $endgroup$


















        5












        $begingroup$

        with the help of Bob Hanlon:



        axx = HoldForm[
        NonCommutativeMultiply @@
        SortBy[List @@ (a[k, l] b[i, j]), First]] // ReleaseHold

        axx //. NonCommutativeMultiply[a_, Y___] :> HoldForm[Times[a, Y]]





        share|improve this answer









        $endgroup$
















          5












          5








          5





          $begingroup$

          with the help of Bob Hanlon:



          axx = HoldForm[
          NonCommutativeMultiply @@
          SortBy[List @@ (a[k, l] b[i, j]), First]] // ReleaseHold

          axx //. NonCommutativeMultiply[a_, Y___] :> HoldForm[Times[a, Y]]





          share|improve this answer









          $endgroup$



          with the help of Bob Hanlon:



          axx = HoldForm[
          NonCommutativeMultiply @@
          SortBy[List @@ (a[k, l] b[i, j]), First]] // ReleaseHold

          axx //. NonCommutativeMultiply[a_, Y___] :> HoldForm[Times[a, Y]]






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Feb 7 at 16:47









          user49047user49047

          405213




          405213























              0












              $begingroup$

              SortBy[Inactivate[a[m, n] b[i, j] c[k, l], Times], Function[x, #[[x]]]/@ Range[Length@#]&] /.
              Inactive[Times] -> HoldForm@*Times



              b[i,j] c[k,l] a[m,n]







              share|improve this answer









              $endgroup$


















                0












                $begingroup$

                SortBy[Inactivate[a[m, n] b[i, j] c[k, l], Times], Function[x, #[[x]]]/@ Range[Length@#]&] /.
                Inactive[Times] -> HoldForm@*Times



                b[i,j] c[k,l] a[m,n]







                share|improve this answer









                $endgroup$
















                  0












                  0








                  0





                  $begingroup$

                  SortBy[Inactivate[a[m, n] b[i, j] c[k, l], Times], Function[x, #[[x]]]/@ Range[Length@#]&] /.
                  Inactive[Times] -> HoldForm@*Times



                  b[i,j] c[k,l] a[m,n]







                  share|improve this answer









                  $endgroup$



                  SortBy[Inactivate[a[m, n] b[i, j] c[k, l], Times], Function[x, #[[x]]]/@ Range[Length@#]&] /.
                  Inactive[Times] -> HoldForm@*Times



                  b[i,j] c[k,l] a[m,n]








                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Feb 8 at 0:13









                  kglrkglr

                  190k10206424




                  190k10206424






























                      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%2f191068%2fhow-to-sort-the-expression-not-based-on-the-heads-in-times%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

                      Human spaceflight

                      Can not write log (Is /dev/pts mounted?) - openpty in Ubuntu-on-Windows?

                      張江高科駅