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;
$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
code-golf linear-algebra
$endgroup$
add a comment
|
$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
code-golf linear-algebra
$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, use0
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 inputu = [2, 0, 1]
?
$endgroup$
– Value Ink
5 hours ago
$begingroup$
@ValueInk Of course!
$endgroup$
– Sanchises
7 mins ago
add a comment
|
$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
code-golf linear-algebra
$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
code-golf linear-algebra
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, use0
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 inputu = [2, 0, 1]
?
$endgroup$
– Value Ink
5 hours ago
$begingroup$
@ValueInk Of course!
$endgroup$
– Sanchises
7 mins ago
add a comment
|
$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, use0
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 inputu = [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
add a comment
|
10 Answers
10
active
oldest
votes
$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!
$endgroup$
add a comment
|
$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.
$endgroup$
add a comment
|
$begingroup$
Wolfram Language (Mathematica), 30 bytes
ii[[#,#]]&/@#,Ordering@#&
Try it online!
Input as f[A][u]
.
$endgroup$
add a comment
|
$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
$endgroup$
add a comment
|
$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
.
$endgroup$
add a comment
|
$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$.
$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 afor
-loop did not come to my mind.
$endgroup$
– Joel
45 mins ago
add a comment
|
$begingroup$
Jelly, 13 bytes
ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸
Try it online!
$endgroup$
add a comment
|
$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
.
$endgroup$
$begingroup$
Are you sure thatlength 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
add a comment
|
$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!
$endgroup$
add a comment
|
$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.
- The right most
],:/:
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.
$endgroup$
add a comment
|
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$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!
$endgroup$
add a comment
|
$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!
$endgroup$
add a comment
|
$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!
$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!
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
add a comment
|
add a comment
|
$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.
$endgroup$
add a comment
|
$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.
$endgroup$
add a comment
|
$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.
$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.
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
add a comment
|
add a comment
|
$begingroup$
Wolfram Language (Mathematica), 30 bytes
ii[[#,#]]&/@#,Ordering@#&
Try it online!
Input as f[A][u]
.
$endgroup$
add a comment
|
$begingroup$
Wolfram Language (Mathematica), 30 bytes
ii[[#,#]]&/@#,Ordering@#&
Try it online!
Input as f[A][u]
.
$endgroup$
add a comment
|
$begingroup$
Wolfram Language (Mathematica), 30 bytes
ii[[#,#]]&/@#,Ordering@#&
Try it online!
Input as f[A][u]
.
$endgroup$
Wolfram Language (Mathematica), 30 bytes
ii[[#,#]]&/@#,Ordering@#&
Try it online!
Input as f[A][u]
.
answered 6 hours ago
attinatattinat
2,9263 silver badges11 bronze badges
2,9263 silver badges11 bronze badges
add a comment
|
add a comment
|
$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
$endgroup$
add a comment
|
$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
$endgroup$
add a comment
|
$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
$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
answered 7 hours ago
NeilNeil
89.1k8 gold badges46 silver badges188 bronze badges
89.1k8 gold badges46 silver badges188 bronze badges
add a comment
|
add a comment
|
$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
.
$endgroup$
add a comment
|
$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
.
$endgroup$
add a comment
|
$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
.
$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
.
answered 5 hours ago
GiuseppeGiuseppe
19.3k3 gold badges16 silver badges71 bronze badges
19.3k3 gold badges16 silver badges71 bronze badges
add a comment
|
add a comment
|
$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$.
$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 afor
-loop did not come to my mind.
$endgroup$
– Joel
45 mins ago
add a comment
|
$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$.
$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 afor
-loop did not come to my mind.
$endgroup$
– Joel
45 mins ago
add a comment
|
$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$.
$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$.
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 afor
-loop did not come to my mind.
$endgroup$
– Joel
45 mins ago
add a comment
|
$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 afor
-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
add a comment
|
$begingroup$
Jelly, 13 bytes
ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸
Try it online!
$endgroup$
add a comment
|
$begingroup$
Jelly, 13 bytes
ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸
Try it online!
$endgroup$
add a comment
|
$begingroup$
Jelly, 13 bytes
ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸
Try it online!
$endgroup$
Jelly, 13 bytes
ŒJṁ⁸ịⱮ⁹,Ụ¤œị⁸
Try it online!
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
add a comment
|
add a comment
|
$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
.
$endgroup$
$begingroup$
Are you sure thatlength 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
add a comment
|
$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
.
$endgroup$
$begingroup$
Are you sure thatlength 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
add a comment
|
$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
.
$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
.
answered 5 hours ago
niminimi
34k3 gold badges27 silver badges91 bronze badges
34k3 gold badges27 silver badges91 bronze badges
$begingroup$
Are you sure thatlength 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
add a comment
|
$begingroup$
Are you sure thatlength 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
add a comment
|
$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!
$endgroup$
add a comment
|
$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!
$endgroup$
add a comment
|
$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!
$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!
answered 1 hour ago
JohnWellsJohnWells
5711 silver badge7 bronze badges
5711 silver badge7 bronze badges
add a comment
|
add a comment
|
$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.
- The right most
],:/:
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.
$endgroup$
add a comment
|
$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.
- The right most
],:/:
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.
$endgroup$
add a comment
|
$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.
- The right most
],:/:
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.
$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.
- The right most
],:/:
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.
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
add a comment
|
add a comment
|
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).
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
$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