Reorder a matrix, twiceCalculate Landau's functionOptimize matrix chain multiplicationBlock-diagonal matrix from columnsZigzagify a MatrixMatrix TrigonometrySymbolic matrix multiplicationIs the matrix rank-one?Generalized matrix traceFind the inverse of a 3 by 3 matrixCut-Off The MatrixMatrix rotation sort

What is the difference between an astronaut in the ISS and a freediver in perfect neutral buoyancy?

Can an integer optimization problem be convex?

Do we know the situation in Britain before Sealion (summer 1940)?

Examples of "unsuccessful" theories with afterlives

while loop factorial only works up to 20?

Designing a time thief proof safe

Can a DC brushless motor produce the same torque at different power levels?

How can I repair this gas leak on my new range? Teflon tape isn't working

Does Sitecore have support for Sitecore products in containers?

Is this Portent-like spell balanced?

Are Custom Indexes passed on to Sandboxes

My Project Manager does not accept carry-over in Scrum, Is that normal?

Is there a way to hide HTML source code yet keeping it effective?

Is there a difference between equality and identity?

Are lawyers allowed to come to agreements with opposing lawyers without the client's knowledge or consent?

Hiking with a mule or two?

Why weren't the Death Star plans transmitted electronically?

Social leper versus social leopard

Should the average user with no special access rights be worried about SMS-based 2FA being theoretically interceptable?

To change trains = cambiare treno?

Order of ingredients when making Pizza dough

Late 1970's and 6502 chip facilities for operating systems

Comma Code - Automate the Boring Stuff with Python

Safely hang a mirror that does not have hooks



Reorder a matrix, twice


Calculate Landau's functionOptimize matrix chain multiplicationBlock-diagonal matrix from columnsZigzagify a MatrixMatrix TrigonometrySymbolic matrix multiplicationIs the matrix rank-one?Generalized matrix traceFind the inverse of a 3 by 3 matrixCut-Off The MatrixMatrix rotation sort






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








9












$begingroup$


You are given a square $n times n$ matrix $A$, and a list (or vector) $u$ of length $n$ containing the numbers $1$ through $n$ (or $0$ through $n-1$). Your task is to reorder the columns and rows of the matrix $A$ according to the order specified in $u$.



That is, you will construct a matrix $B$ where the $(i,j)$-th element is the $(u(i),u(j))$-th element of $A$. You should also output the inverse of this action; that is, the (i,j)-th element of $A$ will end up at position $(u(i),u(j))$ in a new matrix $C$.



For example, given $$A = beginbmatrix 11 &12& 13 \ 21& 22& 23 \ 31& 32& 33 endbmatrix,quad u=beginbmatrix3 & 1 & 2endbmatrix$$



the output should be $$B = beginbmatrix33 & 31 & 32 \ 13 & 11 & 12 \ 23 & 21 & 22 endbmatrix,quad C= beginbmatrix22 & 23 & 21 \32 & 33 & 31 \ 12 & 13 & 11 endbmatrix$$



You may take input and output through any of the default I/O methods. You do not have to specify which matrix is $B$ or $C$, as long as you output both. You may assume $A$ only contains positive integers, and you may use 1- or 0-based indexing for $u$. You must support matrices up to at least size $64 times 64$.



Example



===== Input =====
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
u=
3 5 6 1 4 2

==== Output =====
B =
2 27 20 31 22 9
34 14 16 30 12 5
29 18 11 4 13 36
6 19 24 35 26 1
33 10 15 8 17 28
7 23 25 3 21 32
C =
17 15 8 10 28 33
13 11 4 18 36 29
26 24 35 19 1 6
12 16 30 14 5 34
21 25 3 23 32 7
22 20 31 27 9 2









share|improve this question











$endgroup$













  • $begingroup$
    Sandbox
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
    $endgroup$
    – Luis Mendo
    9 hours ago











  • $begingroup$
    @LuisMendo Sure no problem.
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
    $endgroup$
    – Value Ink
    5 hours ago










  • $begingroup$
    @ValueInk Of course!
    $endgroup$
    – Sanchises
    7 mins ago

















9












$begingroup$


You are given a square $n times n$ matrix $A$, and a list (or vector) $u$ of length $n$ containing the numbers $1$ through $n$ (or $0$ through $n-1$). Your task is to reorder the columns and rows of the matrix $A$ according to the order specified in $u$.



That is, you will construct a matrix $B$ where the $(i,j)$-th element is the $(u(i),u(j))$-th element of $A$. You should also output the inverse of this action; that is, the (i,j)-th element of $A$ will end up at position $(u(i),u(j))$ in a new matrix $C$.



For example, given $$A = beginbmatrix 11 &12& 13 \ 21& 22& 23 \ 31& 32& 33 endbmatrix,quad u=beginbmatrix3 & 1 & 2endbmatrix$$



the output should be $$B = beginbmatrix33 & 31 & 32 \ 13 & 11 & 12 \ 23 & 21 & 22 endbmatrix,quad C= beginbmatrix22 & 23 & 21 \32 & 33 & 31 \ 12 & 13 & 11 endbmatrix$$



You may take input and output through any of the default I/O methods. You do not have to specify which matrix is $B$ or $C$, as long as you output both. You may assume $A$ only contains positive integers, and you may use 1- or 0-based indexing for $u$. You must support matrices up to at least size $64 times 64$.



Example



===== Input =====
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
u=
3 5 6 1 4 2

==== Output =====
B =
2 27 20 31 22 9
34 14 16 30 12 5
29 18 11 4 13 36
6 19 24 35 26 1
33 10 15 8 17 28
7 23 25 3 21 32
C =
17 15 8 10 28 33
13 11 4 18 36 29
26 24 35 19 1 6
12 16 30 14 5 34
21 25 3 23 32 7
22 20 31 27 9 2









share|improve this question











$endgroup$













  • $begingroup$
    Sandbox
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
    $endgroup$
    – Luis Mendo
    9 hours ago











  • $begingroup$
    @LuisMendo Sure no problem.
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
    $endgroup$
    – Value Ink
    5 hours ago










  • $begingroup$
    @ValueInk Of course!
    $endgroup$
    – Sanchises
    7 mins ago













9












9








9


1



$begingroup$


You are given a square $n times n$ matrix $A$, and a list (or vector) $u$ of length $n$ containing the numbers $1$ through $n$ (or $0$ through $n-1$). Your task is to reorder the columns and rows of the matrix $A$ according to the order specified in $u$.



That is, you will construct a matrix $B$ where the $(i,j)$-th element is the $(u(i),u(j))$-th element of $A$. You should also output the inverse of this action; that is, the (i,j)-th element of $A$ will end up at position $(u(i),u(j))$ in a new matrix $C$.



For example, given $$A = beginbmatrix 11 &12& 13 \ 21& 22& 23 \ 31& 32& 33 endbmatrix,quad u=beginbmatrix3 & 1 & 2endbmatrix$$



the output should be $$B = beginbmatrix33 & 31 & 32 \ 13 & 11 & 12 \ 23 & 21 & 22 endbmatrix,quad C= beginbmatrix22 & 23 & 21 \32 & 33 & 31 \ 12 & 13 & 11 endbmatrix$$



You may take input and output through any of the default I/O methods. You do not have to specify which matrix is $B$ or $C$, as long as you output both. You may assume $A$ only contains positive integers, and you may use 1- or 0-based indexing for $u$. You must support matrices up to at least size $64 times 64$.



Example



===== Input =====
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
u=
3 5 6 1 4 2

==== Output =====
B =
2 27 20 31 22 9
34 14 16 30 12 5
29 18 11 4 13 36
6 19 24 35 26 1
33 10 15 8 17 28
7 23 25 3 21 32
C =
17 15 8 10 28 33
13 11 4 18 36 29
26 24 35 19 1 6
12 16 30 14 5 34
21 25 3 23 32 7
22 20 31 27 9 2









share|improve this question











$endgroup$




You are given a square $n times n$ matrix $A$, and a list (or vector) $u$ of length $n$ containing the numbers $1$ through $n$ (or $0$ through $n-1$). Your task is to reorder the columns and rows of the matrix $A$ according to the order specified in $u$.



That is, you will construct a matrix $B$ where the $(i,j)$-th element is the $(u(i),u(j))$-th element of $A$. You should also output the inverse of this action; that is, the (i,j)-th element of $A$ will end up at position $(u(i),u(j))$ in a new matrix $C$.



For example, given $$A = beginbmatrix 11 &12& 13 \ 21& 22& 23 \ 31& 32& 33 endbmatrix,quad u=beginbmatrix3 & 1 & 2endbmatrix$$



the output should be $$B = beginbmatrix33 & 31 & 32 \ 13 & 11 & 12 \ 23 & 21 & 22 endbmatrix,quad C= beginbmatrix22 & 23 & 21 \32 & 33 & 31 \ 12 & 13 & 11 endbmatrix$$



You may take input and output through any of the default I/O methods. You do not have to specify which matrix is $B$ or $C$, as long as you output both. You may assume $A$ only contains positive integers, and you may use 1- or 0-based indexing for $u$. You must support matrices up to at least size $64 times 64$.



Example



===== Input =====
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
u=
3 5 6 1 4 2

==== Output =====
B =
2 27 20 31 22 9
34 14 16 30 12 5
29 18 11 4 13 36
6 19 24 35 26 1
33 10 15 8 17 28
7 23 25 3 21 32
C =
17 15 8 10 28 33
13 11 4 18 36 29
26 24 35 19 1 6
12 16 30 14 5 34
21 25 3 23 32 7
22 20 31 27 9 2






code-golf linear-algebra






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 6 mins ago







Sanchises

















asked 9 hours ago









SanchisesSanchises

6,7221 gold badge24 silver badges53 bronze badges




6,7221 gold badge24 silver badges53 bronze badges














  • $begingroup$
    Sandbox
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
    $endgroup$
    – Luis Mendo
    9 hours ago











  • $begingroup$
    @LuisMendo Sure no problem.
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
    $endgroup$
    – Value Ink
    5 hours ago










  • $begingroup$
    @ValueInk Of course!
    $endgroup$
    – Sanchises
    7 mins ago
















  • $begingroup$
    Sandbox
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
    $endgroup$
    – Luis Mendo
    9 hours ago











  • $begingroup$
    @LuisMendo Sure no problem.
    $endgroup$
    – Sanchises
    9 hours ago










  • $begingroup$
    Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
    $endgroup$
    – Value Ink
    5 hours ago










  • $begingroup$
    @ValueInk Of course!
    $endgroup$
    – Sanchises
    7 mins ago















$begingroup$
Sandbox
$endgroup$
– Sanchises
9 hours ago




$begingroup$
Sandbox
$endgroup$
– Sanchises
9 hours ago












$begingroup$
Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
$endgroup$
– Luis Mendo
9 hours ago





$begingroup$
Can we output without the empty line here, that is, like this? (there is no ambiguity) Or, failing that, use 0 as separator?
$endgroup$
– Luis Mendo
9 hours ago













$begingroup$
@LuisMendo Sure no problem.
$endgroup$
– Sanchises
9 hours ago




$begingroup$
@LuisMendo Sure no problem.
$endgroup$
– Sanchises
9 hours ago












$begingroup$
Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
$endgroup$
– Value Ink
5 hours ago




$begingroup$
Is 1-indexing required for this? Can we use 0-indexing and input u = [2, 0, 1]?
$endgroup$
– Value Ink
5 hours ago












$begingroup$
@ValueInk Of course!
$endgroup$
– Sanchises
7 mins ago




$begingroup$
@ValueInk Of course!
$endgroup$
– Sanchises
7 mins ago










10 Answers
10






active

oldest

votes


















3














$begingroup$


MATL, 15 13 bytes



t3$)&Gw&St3$)


Inputs u, then A.



Outputs B, then C without a separator, as there is no ambiguity.



Try it online!






share|improve this answer











$endgroup$






















    3














    $begingroup$


    Octave, 33 bytes





    @(A,u)A(u,u) A([~,v]=sort(u),v)


    Try it online!



    Thanks to Luis for correcting an error and saving several bytes!



    Basic indexing works here for both tasks, by defining a vector $ v $ equal to the permutation that undoes $ u $. That is, if $ u = ( 3, 1, 2 ) $ then the first element of $ v $ is 2, since 1 is in the second position of $ u $. This is accomplished with Octave's sort function.






    share|improve this answer











    $endgroup$






















      2














      $begingroup$


      Wolfram Language (Mathematica), 30 bytes



      ii[[#,#]]&/@#,Ordering@#&


      Try it online!



      Input as f[A][u].






      share|improve this answer









      $endgroup$






















        1














        $begingroup$


        Charcoal, 24 bytes



        E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 


        Try it online! Link is to verbose version of code. 0-indexed. Note: Trailing space. Explanation:



         η Input `u`
        E Map over elements
        ⌕ Index of
        κ Current index in
        η Input `u`
        η Input `u`
        E⟦ ⟧ Map over `u` and its inverse
        θ Input `A`
        E Map over elements
        θ Input `A`
        E Map over elements
        θ Input `A`
        § Indexed by
        ι Current vector
        § Indexed by
        μ Row index
        § Indexed by
        ι Current vector
        § Indexed by
        ξ Column index
        ⪫ Join with spaces for readability
        Implicitly print





        share|improve this answer









        $endgroup$






















          1














          $begingroup$


          R, 42 bytes





          function(A,o)list(A[o,o],A[I<-order(o),I])


          Try it online!



          Takes A as a matrix and 1-based indexes o.






          share|improve this answer









          $endgroup$






















            1














            $begingroup$


            Python 3 with numpy, 51 45 bytes





            lambda m,p:[m[x][:,x]for x in(p,p.argsort())]


            Try it online!



            -6 bytes thanks to @xnor



            The function takes two arguments: a numpy matrix and a permutation vector having values from $0$ to $n-1$.






            share|improve this answer











            $endgroup$














            • $begingroup$
              45 bytes as lambda
              $endgroup$
              – xnor
              50 mins ago










            • $begingroup$
              @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
              $endgroup$
              – Joel
              45 mins ago



















            0














            $begingroup$


            Jelly, 13 bytes



            ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸


            Try it online!






            share|improve this answer









            $endgroup$






















              0














              $begingroup$

              Haskell, 66 bytes



              (!)=map.(!!) 
              m#v=(!v)<$>m!v
              m%v=map(iterate(#v)m!!)[1,length v-1]


              Returns a two element list [B,C].



              Try it online!



              Function # reorders the matrix m according to the vector v. We repeat this step again and again and collect the intermediate results in a list, starting with the original matrix. Matrix B is the second element (index 1, 0-based) of this list and matix C is at index length v-1, just before it reorders back to m.






              share|improve this answer









              $endgroup$














              • $begingroup$
                Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                $endgroup$
                – xnor
                1 hour ago



















              0














              $begingroup$


              Kotlin, 213 bytes



              a:List<List<Int>>,u:List<Int>->val s=u.size
              for(l in List(s)r->List(s)c->a[u[r]][u[c]])println(l.joinToString(" "))
              for(l in List(s)r->List(s)c->a[u.indexOf(r)][u.indexOf(c)])println(l.joinToString(" "))


              Try it online!






              share|improve this answer









              $endgroup$






















                0














                $begingroup$


                J, 19 bytes



                (]/:~"1/:)"_ 1],:/:


                Try it online!



                • Main verb ]/:~"1/:

                  • The right most /: sorts the left arg (matrix) according to the order that would sort the right arg (specified order). This sorts rows.

                  • Now that result get sorted /:~"1 again according to the order specified ]. But this time we're sorting with rank 1, ie, we're sorting each row, which has the effect of sorting columns.



                • ],:/: We apply the above using both the order specified ] and the grade up of the order specified /:. This gives us the 2 results we want.





                share|improve this answer











                $endgroup$

















                  Your Answer






                  StackExchange.ifUsing("editor", function ()
                  StackExchange.using("externalEditor", function ()
                  StackExchange.using("snippets", function ()
                  StackExchange.snippets.init();
                  );
                  );
                  , "code-snippets");

                  StackExchange.ready(function()
                  var channelOptions =
                  tags: "".split(" "),
                  id: "200"
                  ;
                  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/4.0/"u003ecc by-sa 4.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%2fcodegolf.stackexchange.com%2fquestions%2f193254%2freorder-a-matrix-twice%23new-answer', 'question_page');

                  );

                  Post as a guest















                  Required, but never shown

























                  10 Answers
                  10






                  active

                  oldest

                  votes








                  10 Answers
                  10






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes









                  3














                  $begingroup$


                  MATL, 15 13 bytes



                  t3$)&Gw&St3$)


                  Inputs u, then A.



                  Outputs B, then C without a separator, as there is no ambiguity.



                  Try it online!






                  share|improve this answer











                  $endgroup$



















                    3














                    $begingroup$


                    MATL, 15 13 bytes



                    t3$)&Gw&St3$)


                    Inputs u, then A.



                    Outputs B, then C without a separator, as there is no ambiguity.



                    Try it online!






                    share|improve this answer











                    $endgroup$

















                      3














                      3










                      3







                      $begingroup$


                      MATL, 15 13 bytes



                      t3$)&Gw&St3$)


                      Inputs u, then A.



                      Outputs B, then C without a separator, as there is no ambiguity.



                      Try it online!






                      share|improve this answer











                      $endgroup$




                      MATL, 15 13 bytes



                      t3$)&Gw&St3$)


                      Inputs u, then A.



                      Outputs B, then C without a separator, as there is no ambiguity.



                      Try it online!







                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited 9 hours ago

























                      answered 9 hours ago









                      Luis MendoLuis Mendo

                      78.3k8 gold badges97 silver badges303 bronze badges




                      78.3k8 gold badges97 silver badges303 bronze badges


























                          3














                          $begingroup$


                          Octave, 33 bytes





                          @(A,u)A(u,u) A([~,v]=sort(u),v)


                          Try it online!



                          Thanks to Luis for correcting an error and saving several bytes!



                          Basic indexing works here for both tasks, by defining a vector $ v $ equal to the permutation that undoes $ u $. That is, if $ u = ( 3, 1, 2 ) $ then the first element of $ v $ is 2, since 1 is in the second position of $ u $. This is accomplished with Octave's sort function.






                          share|improve this answer











                          $endgroup$



















                            3














                            $begingroup$


                            Octave, 33 bytes





                            @(A,u)A(u,u) A([~,v]=sort(u),v)


                            Try it online!



                            Thanks to Luis for correcting an error and saving several bytes!



                            Basic indexing works here for both tasks, by defining a vector $ v $ equal to the permutation that undoes $ u $. That is, if $ u = ( 3, 1, 2 ) $ then the first element of $ v $ is 2, since 1 is in the second position of $ u $. This is accomplished with Octave's sort function.






                            share|improve this answer











                            $endgroup$

















                              3














                              3










                              3







                              $begingroup$


                              Octave, 33 bytes





                              @(A,u)A(u,u) A([~,v]=sort(u),v)


                              Try it online!



                              Thanks to Luis for correcting an error and saving several bytes!



                              Basic indexing works here for both tasks, by defining a vector $ v $ equal to the permutation that undoes $ u $. That is, if $ u = ( 3, 1, 2 ) $ then the first element of $ v $ is 2, since 1 is in the second position of $ u $. This is accomplished with Octave's sort function.






                              share|improve this answer











                              $endgroup$




                              Octave, 33 bytes





                              @(A,u)A(u,u) A([~,v]=sort(u),v)


                              Try it online!



                              Thanks to Luis for correcting an error and saving several bytes!



                              Basic indexing works here for both tasks, by defining a vector $ v $ equal to the permutation that undoes $ u $. That is, if $ u = ( 3, 1, 2 ) $ then the first element of $ v $ is 2, since 1 is in the second position of $ u $. This is accomplished with Octave's sort function.







                              share|improve this answer














                              share|improve this answer



                              share|improve this answer








                              edited 8 hours ago

























                              answered 9 hours ago









                              FryAmTheEggmanFryAmTheEggman

                              15.3k3 gold badges26 silver badges85 bronze badges




                              15.3k3 gold badges26 silver badges85 bronze badges
























                                  2














                                  $begingroup$


                                  Wolfram Language (Mathematica), 30 bytes



                                  ii[[#,#]]&/@#,Ordering@#&


                                  Try it online!



                                  Input as f[A][u].






                                  share|improve this answer









                                  $endgroup$



















                                    2














                                    $begingroup$


                                    Wolfram Language (Mathematica), 30 bytes



                                    ii[[#,#]]&/@#,Ordering@#&


                                    Try it online!



                                    Input as f[A][u].






                                    share|improve this answer









                                    $endgroup$

















                                      2














                                      2










                                      2







                                      $begingroup$


                                      Wolfram Language (Mathematica), 30 bytes



                                      ii[[#,#]]&/@#,Ordering@#&


                                      Try it online!



                                      Input as f[A][u].






                                      share|improve this answer









                                      $endgroup$




                                      Wolfram Language (Mathematica), 30 bytes



                                      ii[[#,#]]&/@#,Ordering@#&


                                      Try it online!



                                      Input as f[A][u].







                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered 6 hours ago









                                      attinatattinat

                                      2,9263 silver badges11 bronze badges




                                      2,9263 silver badges11 bronze badges
























                                          1














                                          $begingroup$


                                          Charcoal, 24 bytes



                                          E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 


                                          Try it online! Link is to verbose version of code. 0-indexed. Note: Trailing space. Explanation:



                                           η Input `u`
                                          E Map over elements
                                          ⌕ Index of
                                          κ Current index in
                                          η Input `u`
                                          η Input `u`
                                          E⟦ ⟧ Map over `u` and its inverse
                                          θ Input `A`
                                          E Map over elements
                                          θ Input `A`
                                          E Map over elements
                                          θ Input `A`
                                          § Indexed by
                                          ι Current vector
                                          § Indexed by
                                          μ Row index
                                          § Indexed by
                                          ι Current vector
                                          § Indexed by
                                          ξ Column index
                                          ⪫ Join with spaces for readability
                                          Implicitly print





                                          share|improve this answer









                                          $endgroup$



















                                            1














                                            $begingroup$


                                            Charcoal, 24 bytes



                                            E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 


                                            Try it online! Link is to verbose version of code. 0-indexed. Note: Trailing space. Explanation:



                                             η Input `u`
                                            E Map over elements
                                            ⌕ Index of
                                            κ Current index in
                                            η Input `u`
                                            η Input `u`
                                            E⟦ ⟧ Map over `u` and its inverse
                                            θ Input `A`
                                            E Map over elements
                                            θ Input `A`
                                            E Map over elements
                                            θ Input `A`
                                            § Indexed by
                                            ι Current vector
                                            § Indexed by
                                            μ Row index
                                            § Indexed by
                                            ι Current vector
                                            § Indexed by
                                            ξ Column index
                                            ⪫ Join with spaces for readability
                                            Implicitly print





                                            share|improve this answer









                                            $endgroup$

















                                              1














                                              1










                                              1







                                              $begingroup$


                                              Charcoal, 24 bytes



                                              E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 


                                              Try it online! Link is to verbose version of code. 0-indexed. Note: Trailing space. Explanation:



                                               η Input `u`
                                              E Map over elements
                                              ⌕ Index of
                                              κ Current index in
                                              η Input `u`
                                              η Input `u`
                                              E⟦ ⟧ Map over `u` and its inverse
                                              θ Input `A`
                                              E Map over elements
                                              θ Input `A`
                                              E Map over elements
                                              θ Input `A`
                                              § Indexed by
                                              ι Current vector
                                              § Indexed by
                                              μ Row index
                                              § Indexed by
                                              ι Current vector
                                              § Indexed by
                                              ξ Column index
                                              ⪫ Join with spaces for readability
                                              Implicitly print





                                              share|improve this answer









                                              $endgroup$




                                              Charcoal, 24 bytes



                                              E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 


                                              Try it online! Link is to verbose version of code. 0-indexed. Note: Trailing space. Explanation:



                                               η Input `u`
                                              E Map over elements
                                              ⌕ Index of
                                              κ Current index in
                                              η Input `u`
                                              η Input `u`
                                              E⟦ ⟧ Map over `u` and its inverse
                                              θ Input `A`
                                              E Map over elements
                                              θ Input `A`
                                              E Map over elements
                                              θ Input `A`
                                              § Indexed by
                                              ι Current vector
                                              § Indexed by
                                              μ Row index
                                              § Indexed by
                                              ι Current vector
                                              § Indexed by
                                              ξ Column index
                                              ⪫ Join with spaces for readability
                                              Implicitly print






                                              share|improve this answer












                                              share|improve this answer



                                              share|improve this answer










                                              answered 7 hours ago









                                              NeilNeil

                                              89.1k8 gold badges46 silver badges188 bronze badges




                                              89.1k8 gold badges46 silver badges188 bronze badges
























                                                  1














                                                  $begingroup$


                                                  R, 42 bytes





                                                  function(A,o)list(A[o,o],A[I<-order(o),I])


                                                  Try it online!



                                                  Takes A as a matrix and 1-based indexes o.






                                                  share|improve this answer









                                                  $endgroup$



















                                                    1














                                                    $begingroup$


                                                    R, 42 bytes





                                                    function(A,o)list(A[o,o],A[I<-order(o),I])


                                                    Try it online!



                                                    Takes A as a matrix and 1-based indexes o.






                                                    share|improve this answer









                                                    $endgroup$

















                                                      1














                                                      1










                                                      1







                                                      $begingroup$


                                                      R, 42 bytes





                                                      function(A,o)list(A[o,o],A[I<-order(o),I])


                                                      Try it online!



                                                      Takes A as a matrix and 1-based indexes o.






                                                      share|improve this answer









                                                      $endgroup$




                                                      R, 42 bytes





                                                      function(A,o)list(A[o,o],A[I<-order(o),I])


                                                      Try it online!



                                                      Takes A as a matrix and 1-based indexes o.







                                                      share|improve this answer












                                                      share|improve this answer



                                                      share|improve this answer










                                                      answered 5 hours ago









                                                      GiuseppeGiuseppe

                                                      19.3k3 gold badges16 silver badges71 bronze badges




                                                      19.3k3 gold badges16 silver badges71 bronze badges
























                                                          1














                                                          $begingroup$


                                                          Python 3 with numpy, 51 45 bytes





                                                          lambda m,p:[m[x][:,x]for x in(p,p.argsort())]


                                                          Try it online!



                                                          -6 bytes thanks to @xnor



                                                          The function takes two arguments: a numpy matrix and a permutation vector having values from $0$ to $n-1$.






                                                          share|improve this answer











                                                          $endgroup$














                                                          • $begingroup$
                                                            45 bytes as lambda
                                                            $endgroup$
                                                            – xnor
                                                            50 mins ago










                                                          • $begingroup$
                                                            @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                            $endgroup$
                                                            – Joel
                                                            45 mins ago
















                                                          1














                                                          $begingroup$


                                                          Python 3 with numpy, 51 45 bytes





                                                          lambda m,p:[m[x][:,x]for x in(p,p.argsort())]


                                                          Try it online!



                                                          -6 bytes thanks to @xnor



                                                          The function takes two arguments: a numpy matrix and a permutation vector having values from $0$ to $n-1$.






                                                          share|improve this answer











                                                          $endgroup$














                                                          • $begingroup$
                                                            45 bytes as lambda
                                                            $endgroup$
                                                            – xnor
                                                            50 mins ago










                                                          • $begingroup$
                                                            @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                            $endgroup$
                                                            – Joel
                                                            45 mins ago














                                                          1














                                                          1










                                                          1







                                                          $begingroup$


                                                          Python 3 with numpy, 51 45 bytes





                                                          lambda m,p:[m[x][:,x]for x in(p,p.argsort())]


                                                          Try it online!



                                                          -6 bytes thanks to @xnor



                                                          The function takes two arguments: a numpy matrix and a permutation vector having values from $0$ to $n-1$.






                                                          share|improve this answer











                                                          $endgroup$




                                                          Python 3 with numpy, 51 45 bytes





                                                          lambda m,p:[m[x][:,x]for x in(p,p.argsort())]


                                                          Try it online!



                                                          -6 bytes thanks to @xnor



                                                          The function takes two arguments: a numpy matrix and a permutation vector having values from $0$ to $n-1$.







                                                          share|improve this answer














                                                          share|improve this answer



                                                          share|improve this answer








                                                          edited 45 mins ago

























                                                          answered 1 hour ago









                                                          JoelJoel

                                                          1,26110 bronze badges




                                                          1,26110 bronze badges














                                                          • $begingroup$
                                                            45 bytes as lambda
                                                            $endgroup$
                                                            – xnor
                                                            50 mins ago










                                                          • $begingroup$
                                                            @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                            $endgroup$
                                                            – Joel
                                                            45 mins ago

















                                                          • $begingroup$
                                                            45 bytes as lambda
                                                            $endgroup$
                                                            – xnor
                                                            50 mins ago










                                                          • $begingroup$
                                                            @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                            $endgroup$
                                                            – Joel
                                                            45 mins ago
















                                                          $begingroup$
                                                          45 bytes as lambda
                                                          $endgroup$
                                                          – xnor
                                                          50 mins ago




                                                          $begingroup$
                                                          45 bytes as lambda
                                                          $endgroup$
                                                          – xnor
                                                          50 mins ago












                                                          $begingroup$
                                                          @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                          $endgroup$
                                                          – Joel
                                                          45 mins ago





                                                          $begingroup$
                                                          @xnor Thanks ! I felt that it could be shortened in some way but the idea of using a for-loop did not come to my mind.
                                                          $endgroup$
                                                          – Joel
                                                          45 mins ago












                                                          0














                                                          $begingroup$


                                                          Jelly, 13 bytes



                                                          ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸


                                                          Try it online!






                                                          share|improve this answer









                                                          $endgroup$



















                                                            0














                                                            $begingroup$


                                                            Jelly, 13 bytes



                                                            ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸


                                                            Try it online!






                                                            share|improve this answer









                                                            $endgroup$

















                                                              0














                                                              0










                                                              0







                                                              $begingroup$


                                                              Jelly, 13 bytes



                                                              ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸


                                                              Try it online!






                                                              share|improve this answer









                                                              $endgroup$




                                                              Jelly, 13 bytes



                                                              ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸


                                                              Try it online!







                                                              share|improve this answer












                                                              share|improve this answer



                                                              share|improve this answer










                                                              answered 6 hours ago









                                                              Erik the OutgolferErik the Outgolfer

                                                              36.3k4 gold badges30 silver badges113 bronze badges




                                                              36.3k4 gold badges30 silver badges113 bronze badges
























                                                                  0














                                                                  $begingroup$

                                                                  Haskell, 66 bytes



                                                                  (!)=map.(!!) 
                                                                  m#v=(!v)<$>m!v
                                                                  m%v=map(iterate(#v)m!!)[1,length v-1]


                                                                  Returns a two element list [B,C].



                                                                  Try it online!



                                                                  Function # reorders the matrix m according to the vector v. We repeat this step again and again and collect the intermediate results in a list, starting with the original matrix. Matrix B is the second element (index 1, 0-based) of this list and matix C is at index length v-1, just before it reorders back to m.






                                                                  share|improve this answer









                                                                  $endgroup$














                                                                  • $begingroup$
                                                                    Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                    $endgroup$
                                                                    – xnor
                                                                    1 hour ago
















                                                                  0














                                                                  $begingroup$

                                                                  Haskell, 66 bytes



                                                                  (!)=map.(!!) 
                                                                  m#v=(!v)<$>m!v
                                                                  m%v=map(iterate(#v)m!!)[1,length v-1]


                                                                  Returns a two element list [B,C].



                                                                  Try it online!



                                                                  Function # reorders the matrix m according to the vector v. We repeat this step again and again and collect the intermediate results in a list, starting with the original matrix. Matrix B is the second element (index 1, 0-based) of this list and matix C is at index length v-1, just before it reorders back to m.






                                                                  share|improve this answer









                                                                  $endgroup$














                                                                  • $begingroup$
                                                                    Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                    $endgroup$
                                                                    – xnor
                                                                    1 hour ago














                                                                  0














                                                                  0










                                                                  0







                                                                  $begingroup$

                                                                  Haskell, 66 bytes



                                                                  (!)=map.(!!) 
                                                                  m#v=(!v)<$>m!v
                                                                  m%v=map(iterate(#v)m!!)[1,length v-1]


                                                                  Returns a two element list [B,C].



                                                                  Try it online!



                                                                  Function # reorders the matrix m according to the vector v. We repeat this step again and again and collect the intermediate results in a list, starting with the original matrix. Matrix B is the second element (index 1, 0-based) of this list and matix C is at index length v-1, just before it reorders back to m.






                                                                  share|improve this answer









                                                                  $endgroup$



                                                                  Haskell, 66 bytes



                                                                  (!)=map.(!!) 
                                                                  m#v=(!v)<$>m!v
                                                                  m%v=map(iterate(#v)m!!)[1,length v-1]


                                                                  Returns a two element list [B,C].



                                                                  Try it online!



                                                                  Function # reorders the matrix m according to the vector v. We repeat this step again and again and collect the intermediate results in a list, starting with the original matrix. Matrix B is the second element (index 1, 0-based) of this list and matix C is at index length v-1, just before it reorders back to m.







                                                                  share|improve this answer












                                                                  share|improve this answer



                                                                  share|improve this answer










                                                                  answered 5 hours ago









                                                                  niminimi

                                                                  34k3 gold badges27 silver badges91 bronze badges




                                                                  34k3 gold badges27 silver badges91 bronze badges














                                                                  • $begingroup$
                                                                    Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                    $endgroup$
                                                                    – xnor
                                                                    1 hour ago

















                                                                  • $begingroup$
                                                                    Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                    $endgroup$
                                                                    – xnor
                                                                    1 hour ago
















                                                                  $begingroup$
                                                                  Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                  $endgroup$
                                                                  – xnor
                                                                  1 hour ago





                                                                  $begingroup$
                                                                  Are you sure that length v iterations gets you back to the original? I'd think it can go as high as Landau's function.
                                                                  $endgroup$
                                                                  – xnor
                                                                  1 hour ago












                                                                  0














                                                                  $begingroup$


                                                                  Kotlin, 213 bytes



                                                                  a:List<List<Int>>,u:List<Int>->val s=u.size
                                                                  for(l in List(s)r->List(s)c->a[u[r]][u[c]])println(l.joinToString(" "))
                                                                  for(l in List(s)r->List(s)c->a[u.indexOf(r)][u.indexOf(c)])println(l.joinToString(" "))


                                                                  Try it online!






                                                                  share|improve this answer









                                                                  $endgroup$



















                                                                    0














                                                                    $begingroup$


                                                                    Kotlin, 213 bytes



                                                                    a:List<List<Int>>,u:List<Int>->val s=u.size
                                                                    for(l in List(s)r->List(s)c->a[u[r]][u[c]])println(l.joinToString(" "))
                                                                    for(l in List(s)r->List(s)c->a[u.indexOf(r)][u.indexOf(c)])println(l.joinToString(" "))


                                                                    Try it online!






                                                                    share|improve this answer









                                                                    $endgroup$

















                                                                      0














                                                                      0










                                                                      0







                                                                      $begingroup$


                                                                      Kotlin, 213 bytes



                                                                      a:List<List<Int>>,u:List<Int>->val s=u.size
                                                                      for(l in List(s)r->List(s)c->a[u[r]][u[c]])println(l.joinToString(" "))
                                                                      for(l in List(s)r->List(s)c->a[u.indexOf(r)][u.indexOf(c)])println(l.joinToString(" "))


                                                                      Try it online!






                                                                      share|improve this answer









                                                                      $endgroup$




                                                                      Kotlin, 213 bytes



                                                                      a:List<List<Int>>,u:List<Int>->val s=u.size
                                                                      for(l in List(s)r->List(s)c->a[u[r]][u[c]])println(l.joinToString(" "))
                                                                      for(l in List(s)r->List(s)c->a[u.indexOf(r)][u.indexOf(c)])println(l.joinToString(" "))


                                                                      Try it online!







                                                                      share|improve this answer












                                                                      share|improve this answer



                                                                      share|improve this answer










                                                                      answered 1 hour ago









                                                                      JohnWellsJohnWells

                                                                      5711 silver badge7 bronze badges




                                                                      5711 silver badge7 bronze badges
























                                                                          0














                                                                          $begingroup$


                                                                          J, 19 bytes



                                                                          (]/:~"1/:)"_ 1],:/:


                                                                          Try it online!



                                                                          • Main verb ]/:~"1/:

                                                                            • The right most /: sorts the left arg (matrix) according to the order that would sort the right arg (specified order). This sorts rows.

                                                                            • Now that result get sorted /:~"1 again according to the order specified ]. But this time we're sorting with rank 1, ie, we're sorting each row, which has the effect of sorting columns.



                                                                          • ],:/: We apply the above using both the order specified ] and the grade up of the order specified /:. This gives us the 2 results we want.





                                                                          share|improve this answer











                                                                          $endgroup$



















                                                                            0














                                                                            $begingroup$


                                                                            J, 19 bytes



                                                                            (]/:~"1/:)"_ 1],:/:


                                                                            Try it online!



                                                                            • Main verb ]/:~"1/:

                                                                              • The right most /: sorts the left arg (matrix) according to the order that would sort the right arg (specified order). This sorts rows.

                                                                              • Now that result get sorted /:~"1 again according to the order specified ]. But this time we're sorting with rank 1, ie, we're sorting each row, which has the effect of sorting columns.



                                                                            • ],:/: We apply the above using both the order specified ] and the grade up of the order specified /:. This gives us the 2 results we want.





                                                                            share|improve this answer











                                                                            $endgroup$

















                                                                              0














                                                                              0










                                                                              0







                                                                              $begingroup$


                                                                              J, 19 bytes



                                                                              (]/:~"1/:)"_ 1],:/:


                                                                              Try it online!



                                                                              • Main verb ]/:~"1/:

                                                                                • The right most /: sorts the left arg (matrix) according to the order that would sort the right arg (specified order). This sorts rows.

                                                                                • Now that result get sorted /:~"1 again according to the order specified ]. But this time we're sorting with rank 1, ie, we're sorting each row, which has the effect of sorting columns.



                                                                              • ],:/: We apply the above using both the order specified ] and the grade up of the order specified /:. This gives us the 2 results we want.





                                                                              share|improve this answer











                                                                              $endgroup$




                                                                              J, 19 bytes



                                                                              (]/:~"1/:)"_ 1],:/:


                                                                              Try it online!



                                                                              • Main verb ]/:~"1/:

                                                                                • The right most /: sorts the left arg (matrix) according to the order that would sort the right arg (specified order). This sorts rows.

                                                                                • Now that result get sorted /:~"1 again according to the order specified ]. But this time we're sorting with rank 1, ie, we're sorting each row, which has the effect of sorting columns.



                                                                              • ],:/: We apply the above using both the order specified ] and the grade up of the order specified /:. This gives us the 2 results we want.






                                                                              share|improve this answer














                                                                              share|improve this answer



                                                                              share|improve this answer








                                                                              edited 58 mins ago

























                                                                              answered 1 hour ago









                                                                              JonahJonah

                                                                              4,9872 gold badges13 silver badges23 bronze badges




                                                                              4,9872 gold badges13 silver badges23 bronze badges































                                                                                  draft saved

                                                                                  draft discarded















































                                                                                  If this is an answer to a challenge…



                                                                                  • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.


                                                                                  • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
                                                                                    Explanations of your answer make it more interesting to read and are very much encouraged.


                                                                                  • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.


                                                                                  More generally…



                                                                                  • …Please make sure to answer the question and provide sufficient detail.


                                                                                  • …Avoid asking for help, clarification or responding to other answers (use comments instead).




                                                                                  draft saved


                                                                                  draft discarded














                                                                                  StackExchange.ready(
                                                                                  function ()
                                                                                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f193254%2freorder-a-matrix-twice%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

                                                                                  ParseJSON using SSJSUsing AMPscript with SSJS ActivitiesHow to resubscribe a user in Marketing cloud using SSJS?Pulling Subscriber Status from Lists using SSJSRetrieving Emails using SSJSProblem in updating DE using SSJSUsing SSJS to send single email in Marketing CloudError adding EmailSendDefinition using SSJS

                                                                                  Кампала Садржај Географија Географија Историја Становништво Привреда Партнерски градови Референце Спољашње везе Мени за навигацију0°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.340°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.34МедијиПодациЗванични веб-сајту

                                                                                  19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу