Changing the position of rows and columns in a matrixMove element inside a listElegant operations on matrix rows and columnsSort matrix by columns and rows without changing themHow to merge Datasets representing matrices with named rows/columns?Question about the matrix operationChanging the first row of a matrix; subsequent rows depend on the first rowChange entire column of matrix using its own elements for calculationsCreating a matrix and plotting its columns with legendsSort matrix rows and columns while keeping headingOpposite of Part in matrices?reducing matrix size by linear operations on rows and columns
Invariance of results when scaling explanatory variables in logistic regression, is there a proof?
How did Monica know how to operate Carol's "designer"?
Is there a word to describe the feeling of being transfixed out of horror?
Why does this part of the Space Shuttle launch pad seem to be floating in air?
Java - What do constructor type arguments mean when placed *before* the type?
Why does the compiler allow throws when the method will never throw the Exception
Lightning Web Components - Not available in app builder
Would it be legal for a US State to ban exports of a natural resource?
In Star Trek IV, why did the Bounty go back to a time when whales were already rare?
Can a Bard use an arcane focus?
Suggestion on Missing Index Creation
A known event to a history junkie
Calculating the number of days between 2 dates in Excel
Lifted its hind leg on or lifted its hind leg towards?
Giant Toughroad SLR 2 for 200 miles in two days, will it make it?
What would you call a finite collection of unordered objects that are not necessarily distinct?
Is there enough fresh water in the world to eradicate the drinking water crisis?
Why has "pence" been used in this sentence, not "pences"?
Could solar power be utilized and substitute coal in the 19th century?
What if somebody invests in my application?
My boss asked me to take a one-day class, then signs it up as a day off
Make "apt-get update" show the exact output as `apt update`
Teaching indefinite integrals
Hostile work environment after whistle-blowing on coworker and our boss. What do I do?
Changing the position of rows and columns in a matrix
Move element inside a listElegant operations on matrix rows and columnsSort matrix by columns and rows without changing themHow to merge Datasets representing matrices with named rows/columns?Question about the matrix operationChanging the first row of a matrix; subsequent rows depend on the first rowChange entire column of matrix using its own elements for calculationsCreating a matrix and plotting its columns with legendsSort matrix rows and columns while keeping headingOpposite of Part in matrices?reducing matrix size by linear operations on rows and columns
$begingroup$
I have the following self-explanatory question.
https://1drv.ms/u/s!AsyHs3E_aioxhipb3wSPSX_heN-t
As seen from the above matrices, I start with the "original" matrix, which is a symmetric matrix, meaning that first row and first column represent the same variable, say X
, and 2nd row and 2nd column represent the variable Y
, following Z, W, V
. I first want to move 2nd row in the "original" matrix to 4th row. This operation is shown in the matrix denoted by r24
. After this operation, I want to do the same operation on the same columns, meaning that I want to move 2nd column to 4th column as shown in c24
. All of these operations are shown with the colored text. The resulting final matrix, which I aim to create, c24
, should be symmetric with respect to the variable names. It means that the final matrix has the ordered variable names as X, Z, W, Y, V
in columns and rows. In fact, if the above two operations are done correctly, the order of the variables in rows and columns will remain identical.
I like to do all the operations using a Mathematica function such as f[original, 2, 4]
to create the final matrix c24
.
Thank you all.
list-manipulation matrix
$endgroup$
add a comment |
$begingroup$
I have the following self-explanatory question.
https://1drv.ms/u/s!AsyHs3E_aioxhipb3wSPSX_heN-t
As seen from the above matrices, I start with the "original" matrix, which is a symmetric matrix, meaning that first row and first column represent the same variable, say X
, and 2nd row and 2nd column represent the variable Y
, following Z, W, V
. I first want to move 2nd row in the "original" matrix to 4th row. This operation is shown in the matrix denoted by r24
. After this operation, I want to do the same operation on the same columns, meaning that I want to move 2nd column to 4th column as shown in c24
. All of these operations are shown with the colored text. The resulting final matrix, which I aim to create, c24
, should be symmetric with respect to the variable names. It means that the final matrix has the ordered variable names as X, Z, W, Y, V
in columns and rows. In fact, if the above two operations are done correctly, the order of the variables in rows and columns will remain identical.
I like to do all the operations using a Mathematica function such as f[original, 2, 4]
to create the final matrix c24
.
Thank you all.
list-manipulation matrix
$endgroup$
$begingroup$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
FWIW: your matrix is called a Hankel matrix.HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago
add a comment |
$begingroup$
I have the following self-explanatory question.
https://1drv.ms/u/s!AsyHs3E_aioxhipb3wSPSX_heN-t
As seen from the above matrices, I start with the "original" matrix, which is a symmetric matrix, meaning that first row and first column represent the same variable, say X
, and 2nd row and 2nd column represent the variable Y
, following Z, W, V
. I first want to move 2nd row in the "original" matrix to 4th row. This operation is shown in the matrix denoted by r24
. After this operation, I want to do the same operation on the same columns, meaning that I want to move 2nd column to 4th column as shown in c24
. All of these operations are shown with the colored text. The resulting final matrix, which I aim to create, c24
, should be symmetric with respect to the variable names. It means that the final matrix has the ordered variable names as X, Z, W, Y, V
in columns and rows. In fact, if the above two operations are done correctly, the order of the variables in rows and columns will remain identical.
I like to do all the operations using a Mathematica function such as f[original, 2, 4]
to create the final matrix c24
.
Thank you all.
list-manipulation matrix
$endgroup$
I have the following self-explanatory question.
https://1drv.ms/u/s!AsyHs3E_aioxhipb3wSPSX_heN-t
As seen from the above matrices, I start with the "original" matrix, which is a symmetric matrix, meaning that first row and first column represent the same variable, say X
, and 2nd row and 2nd column represent the variable Y
, following Z, W, V
. I first want to move 2nd row in the "original" matrix to 4th row. This operation is shown in the matrix denoted by r24
. After this operation, I want to do the same operation on the same columns, meaning that I want to move 2nd column to 4th column as shown in c24
. All of these operations are shown with the colored text. The resulting final matrix, which I aim to create, c24
, should be symmetric with respect to the variable names. It means that the final matrix has the ordered variable names as X, Z, W, Y, V
in columns and rows. In fact, if the above two operations are done correctly, the order of the variables in rows and columns will remain identical.
I like to do all the operations using a Mathematica function such as f[original, 2, 4]
to create the final matrix c24
.
Thank you all.
list-manipulation matrix
list-manipulation matrix
edited 2 days ago
J. M. is slightly pensive♦
98.5k10308466
98.5k10308466
asked Mar 20 at 13:33
Tugrul TemelTugrul Temel
870213
870213
$begingroup$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
FWIW: your matrix is called a Hankel matrix.HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago
add a comment |
$begingroup$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
FWIW: your matrix is called a Hankel matrix.HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago
$begingroup$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
FWIW: your matrix is called a Hankel matrix.
HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago
$begingroup$
FWIW: your matrix is called a Hankel matrix.
HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago
add a comment |
4 Answers
4
active
oldest
votes
$begingroup$
Simply use Part
and Set
:
f[A_?SquareMatrixQ, i_Integer, j_Integer] := Module[p, idx,
idx = Range[i, j, Sign[j - i]];
p = Range[1, Length[A]];
p[[idx]] = RotateLeft[idx];
A[[p, p]]
]
A = Outer[Plus, Range[5], Range[0, 4]];
A // MatrixForm
$left(
beginarrayccccc
1 & 2 & 3 & 4 & 5 \
2 & 3 & 4 & 5 & 6 \
3 & 4 & 5 & 6 & 7 \
4 & 5 & 6 & 7 & 8 \
5 & 6 & 7 & 8 & 9 \
endarray
right)$
B = f[A,2,4];
B // MatrixForm
$left(
beginarrayccccc
1 & 3 & 4 & 2 & 5 \
3 & 5 & 6 & 4 & 7 \
4 & 6 & 7 & 5 & 8 \
2 & 4 & 5 & 3 & 6 \
5 & 7 & 8 & 6 & 9 \
endarray
right)$
$endgroup$
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
$begingroup$
You didn't reply, but anyway:q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
|
show 1 more comment
$begingroup$
to move a row from $i$ to $j$:
rowmove[A_?MatrixQ, i_Integer, j_Integer] := Insert[Delete[A, i], A[[i]], j]
to move a column from $i$ to $j$:
colmove[A_?MatrixQ, i_Integer, j_Integer] := Transpose@rowmove[Transpose[A], i, j]
both at the same time:
move[A_?MatrixQ, i_Integer, j_Integer] := colmove[rowmove[A, i, j], i, j]
$endgroup$
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solutionf[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this oneg[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables likeB
in a function definition. Instead, I'd useWith
orModule
to make the variable local.
$endgroup$
– Roman
Mar 21 at 14:58
add a comment |
$begingroup$
Define the indices that you want to interchange in a list $ind$ and then you can index into the array $a$ directly.
a = 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7,
4, 5, 6, 7, 8, 5, 6, 7, 8, 9;
ind = 1, 3, 4, 2, 5;
a[[ind, ind]]
If you don't want to specify the index array each time, Roman points out that you can build a simple function to do it:
indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
So to get the above you would specify
ind = indexlist[5,2,4]
$endgroup$
$begingroup$
You can get the index listind
withindexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case,indexlist[5, 2, 4]
will give1, 3, 4, 2, 5
.
$endgroup$
– Roman
Mar 21 at 1:23
add a comment |
$begingroup$
f[A_?MatrixQ, i_Integer, j_Integer] := With[B = Transpose@Insert[Delete[A, i], A[[i]], j],
Transpose@Insert[Delete[B, i], B[[i]], j]]
f[A, 2, 4] // MatrixForm
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "387"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
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%2fmathematica.stackexchange.com%2fquestions%2f193640%2fchanging-the-position-of-rows-and-columns-in-a-matrix%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Simply use Part
and Set
:
f[A_?SquareMatrixQ, i_Integer, j_Integer] := Module[p, idx,
idx = Range[i, j, Sign[j - i]];
p = Range[1, Length[A]];
p[[idx]] = RotateLeft[idx];
A[[p, p]]
]
A = Outer[Plus, Range[5], Range[0, 4]];
A // MatrixForm
$left(
beginarrayccccc
1 & 2 & 3 & 4 & 5 \
2 & 3 & 4 & 5 & 6 \
3 & 4 & 5 & 6 & 7 \
4 & 5 & 6 & 7 & 8 \
5 & 6 & 7 & 8 & 9 \
endarray
right)$
B = f[A,2,4];
B // MatrixForm
$left(
beginarrayccccc
1 & 3 & 4 & 2 & 5 \
3 & 5 & 6 & 4 & 7 \
4 & 6 & 7 & 5 & 8 \
2 & 4 & 5 & 3 & 6 \
5 & 7 & 8 & 6 & 9 \
endarray
right)$
$endgroup$
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
$begingroup$
You didn't reply, but anyway:q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
|
show 1 more comment
$begingroup$
Simply use Part
and Set
:
f[A_?SquareMatrixQ, i_Integer, j_Integer] := Module[p, idx,
idx = Range[i, j, Sign[j - i]];
p = Range[1, Length[A]];
p[[idx]] = RotateLeft[idx];
A[[p, p]]
]
A = Outer[Plus, Range[5], Range[0, 4]];
A // MatrixForm
$left(
beginarrayccccc
1 & 2 & 3 & 4 & 5 \
2 & 3 & 4 & 5 & 6 \
3 & 4 & 5 & 6 & 7 \
4 & 5 & 6 & 7 & 8 \
5 & 6 & 7 & 8 & 9 \
endarray
right)$
B = f[A,2,4];
B // MatrixForm
$left(
beginarrayccccc
1 & 3 & 4 & 2 & 5 \
3 & 5 & 6 & 4 & 7 \
4 & 6 & 7 & 5 & 8 \
2 & 4 & 5 & 3 & 6 \
5 & 7 & 8 & 6 & 9 \
endarray
right)$
$endgroup$
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
$begingroup$
You didn't reply, but anyway:q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
|
show 1 more comment
$begingroup$
Simply use Part
and Set
:
f[A_?SquareMatrixQ, i_Integer, j_Integer] := Module[p, idx,
idx = Range[i, j, Sign[j - i]];
p = Range[1, Length[A]];
p[[idx]] = RotateLeft[idx];
A[[p, p]]
]
A = Outer[Plus, Range[5], Range[0, 4]];
A // MatrixForm
$left(
beginarrayccccc
1 & 2 & 3 & 4 & 5 \
2 & 3 & 4 & 5 & 6 \
3 & 4 & 5 & 6 & 7 \
4 & 5 & 6 & 7 & 8 \
5 & 6 & 7 & 8 & 9 \
endarray
right)$
B = f[A,2,4];
B // MatrixForm
$left(
beginarrayccccc
1 & 3 & 4 & 2 & 5 \
3 & 5 & 6 & 4 & 7 \
4 & 6 & 7 & 5 & 8 \
2 & 4 & 5 & 3 & 6 \
5 & 7 & 8 & 6 & 9 \
endarray
right)$
$endgroup$
Simply use Part
and Set
:
f[A_?SquareMatrixQ, i_Integer, j_Integer] := Module[p, idx,
idx = Range[i, j, Sign[j - i]];
p = Range[1, Length[A]];
p[[idx]] = RotateLeft[idx];
A[[p, p]]
]
A = Outer[Plus, Range[5], Range[0, 4]];
A // MatrixForm
$left(
beginarrayccccc
1 & 2 & 3 & 4 & 5 \
2 & 3 & 4 & 5 & 6 \
3 & 4 & 5 & 6 & 7 \
4 & 5 & 6 & 7 & 8 \
5 & 6 & 7 & 8 & 9 \
endarray
right)$
B = f[A,2,4];
B // MatrixForm
$left(
beginarrayccccc
1 & 3 & 4 & 2 & 5 \
3 & 5 & 6 & 4 & 7 \
4 & 6 & 7 & 5 & 8 \
2 & 4 & 5 & 3 & 6 \
5 & 7 & 8 & 6 & 9 \
endarray
right)$
edited Mar 21 at 23:32
answered Mar 20 at 13:51
Henrik SchumacherHenrik Schumacher
57.7k579158
57.7k579158
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
$begingroup$
You didn't reply, but anyway:q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
|
show 1 more comment
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
$begingroup$
You didn't reply, but anyway:q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
Your answer is very good, with one slight change. When you move the 2nd row to 4th row, the order of the rows should remain unchanged. It means that when you move the 2nd row, the 3rd and 4th rows should just be moved up without changing the order. Of course the same applies to the column movements. This is important for my purpose and that is why I gave a name for rows and columns. Thank you very much for your very quick answer.
$endgroup$
– Tugrul Temel
Mar 20 at 14:03
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
@TugrulTemel I see. Is this better now? I am not sure if the case $i>j$ is handled as you expect.
$endgroup$
– Henrik Schumacher
Mar 20 at 14:16
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
$begingroup$
Excellent...that is what I aim to achieve. Really, thank you so much for your prompt answer. regards, Tugrul
$endgroup$
– Tugrul Temel
Mar 20 at 14:34
1
1
$begingroup$
You didn't reply, but anyway:
q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
$begingroup$
You didn't reply, but anyway:
q = Range[i, j, Sign[j - i]]; p = RotateLeft[q];
$endgroup$
– Mr.Wizard♦
Mar 21 at 23:20
3
3
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
$begingroup$
@Mr.Wizard Sorry, I've been out tonight. This won't happen again, I promise ;) Thank you, that is indeed simpler. I took the freedom to incorporate that into my solution (in an updated version with more performance).
$endgroup$
– Henrik Schumacher
Mar 21 at 23:35
|
show 1 more comment
$begingroup$
to move a row from $i$ to $j$:
rowmove[A_?MatrixQ, i_Integer, j_Integer] := Insert[Delete[A, i], A[[i]], j]
to move a column from $i$ to $j$:
colmove[A_?MatrixQ, i_Integer, j_Integer] := Transpose@rowmove[Transpose[A], i, j]
both at the same time:
move[A_?MatrixQ, i_Integer, j_Integer] := colmove[rowmove[A, i, j], i, j]
$endgroup$
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solutionf[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this oneg[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables likeB
in a function definition. Instead, I'd useWith
orModule
to make the variable local.
$endgroup$
– Roman
Mar 21 at 14:58
add a comment |
$begingroup$
to move a row from $i$ to $j$:
rowmove[A_?MatrixQ, i_Integer, j_Integer] := Insert[Delete[A, i], A[[i]], j]
to move a column from $i$ to $j$:
colmove[A_?MatrixQ, i_Integer, j_Integer] := Transpose@rowmove[Transpose[A], i, j]
both at the same time:
move[A_?MatrixQ, i_Integer, j_Integer] := colmove[rowmove[A, i, j], i, j]
$endgroup$
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solutionf[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this oneg[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables likeB
in a function definition. Instead, I'd useWith
orModule
to make the variable local.
$endgroup$
– Roman
Mar 21 at 14:58
add a comment |
$begingroup$
to move a row from $i$ to $j$:
rowmove[A_?MatrixQ, i_Integer, j_Integer] := Insert[Delete[A, i], A[[i]], j]
to move a column from $i$ to $j$:
colmove[A_?MatrixQ, i_Integer, j_Integer] := Transpose@rowmove[Transpose[A], i, j]
both at the same time:
move[A_?MatrixQ, i_Integer, j_Integer] := colmove[rowmove[A, i, j], i, j]
$endgroup$
to move a row from $i$ to $j$:
rowmove[A_?MatrixQ, i_Integer, j_Integer] := Insert[Delete[A, i], A[[i]], j]
to move a column from $i$ to $j$:
colmove[A_?MatrixQ, i_Integer, j_Integer] := Transpose@rowmove[Transpose[A], i, j]
both at the same time:
move[A_?MatrixQ, i_Integer, j_Integer] := colmove[rowmove[A, i, j], i, j]
answered Mar 20 at 14:53
RomanRoman
3,530819
3,530819
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solutionf[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this oneg[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables likeB
in a function definition. Instead, I'd useWith
orModule
to make the variable local.
$endgroup$
– Roman
Mar 21 at 14:58
add a comment |
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solutionf[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this oneg[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables likeB
in a function definition. Instead, I'd useWith
orModule
to make the variable local.
$endgroup$
– Roman
Mar 21 at 14:58
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Clean solution, copying it...
$endgroup$
– MikeY
Mar 20 at 14:54
$begingroup$
Here is somewhat simplified version of your solution
f[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this one g[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
Here is somewhat simplified version of your solution
f[A_?MatrixQ, i_Integer, j_Integer] := (B = Insert[Delete[A, i], A[[i]], j]; Insert[Delete[Transpose@B, i], B[[All, i]], j])
or this one g[A_?MatrixQ, i_Integer, j_Integer] := (B = Transpose@Insert[Delete[A, i], A[[i]], j]; Transpose@Insert[Delete[B, i], B[[i]], j])
$endgroup$
– Okkes Dulgerci
Mar 21 at 13:40
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables like
B
in a function definition. Instead, I'd use With
or Module
to make the variable local.$endgroup$
– Roman
Mar 21 at 14:58
$begingroup$
@OkkesDulgerci I don't think it's a good idea to use global variables like
B
in a function definition. Instead, I'd use With
or Module
to make the variable local.$endgroup$
– Roman
Mar 21 at 14:58
add a comment |
$begingroup$
Define the indices that you want to interchange in a list $ind$ and then you can index into the array $a$ directly.
a = 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7,
4, 5, 6, 7, 8, 5, 6, 7, 8, 9;
ind = 1, 3, 4, 2, 5;
a[[ind, ind]]
If you don't want to specify the index array each time, Roman points out that you can build a simple function to do it:
indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
So to get the above you would specify
ind = indexlist[5,2,4]
$endgroup$
$begingroup$
You can get the index listind
withindexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case,indexlist[5, 2, 4]
will give1, 3, 4, 2, 5
.
$endgroup$
– Roman
Mar 21 at 1:23
add a comment |
$begingroup$
Define the indices that you want to interchange in a list $ind$ and then you can index into the array $a$ directly.
a = 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7,
4, 5, 6, 7, 8, 5, 6, 7, 8, 9;
ind = 1, 3, 4, 2, 5;
a[[ind, ind]]
If you don't want to specify the index array each time, Roman points out that you can build a simple function to do it:
indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
So to get the above you would specify
ind = indexlist[5,2,4]
$endgroup$
$begingroup$
You can get the index listind
withindexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case,indexlist[5, 2, 4]
will give1, 3, 4, 2, 5
.
$endgroup$
– Roman
Mar 21 at 1:23
add a comment |
$begingroup$
Define the indices that you want to interchange in a list $ind$ and then you can index into the array $a$ directly.
a = 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7,
4, 5, 6, 7, 8, 5, 6, 7, 8, 9;
ind = 1, 3, 4, 2, 5;
a[[ind, ind]]
If you don't want to specify the index array each time, Roman points out that you can build a simple function to do it:
indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
So to get the above you would specify
ind = indexlist[5,2,4]
$endgroup$
Define the indices that you want to interchange in a list $ind$ and then you can index into the array $a$ directly.
a = 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7,
4, 5, 6, 7, 8, 5, 6, 7, 8, 9;
ind = 1, 3, 4, 2, 5;
a[[ind, ind]]
If you don't want to specify the index array each time, Roman points out that you can build a simple function to do it:
indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
So to get the above you would specify
ind = indexlist[5,2,4]
edited Mar 21 at 19:21
answered Mar 20 at 15:39
bill sbill s
54.7k377157
54.7k377157
$begingroup$
You can get the index listind
withindexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case,indexlist[5, 2, 4]
will give1, 3, 4, 2, 5
.
$endgroup$
– Roman
Mar 21 at 1:23
add a comment |
$begingroup$
You can get the index listind
withindexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case,indexlist[5, 2, 4]
will give1, 3, 4, 2, 5
.
$endgroup$
– Roman
Mar 21 at 1:23
$begingroup$
You can get the index list
ind
with indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case, indexlist[5, 2, 4]
will give 1, 3, 4, 2, 5
.$endgroup$
– Roman
Mar 21 at 1:23
$begingroup$
You can get the index list
ind
with indexlist[n_, i_, j_] := Insert[Delete[Range[n], i], i, j]
. In this case, indexlist[5, 2, 4]
will give 1, 3, 4, 2, 5
.$endgroup$
– Roman
Mar 21 at 1:23
add a comment |
$begingroup$
f[A_?MatrixQ, i_Integer, j_Integer] := With[B = Transpose@Insert[Delete[A, i], A[[i]], j],
Transpose@Insert[Delete[B, i], B[[i]], j]]
f[A, 2, 4] // MatrixForm
$endgroup$
add a comment |
$begingroup$
f[A_?MatrixQ, i_Integer, j_Integer] := With[B = Transpose@Insert[Delete[A, i], A[[i]], j],
Transpose@Insert[Delete[B, i], B[[i]], j]]
f[A, 2, 4] // MatrixForm
$endgroup$
add a comment |
$begingroup$
f[A_?MatrixQ, i_Integer, j_Integer] := With[B = Transpose@Insert[Delete[A, i], A[[i]], j],
Transpose@Insert[Delete[B, i], B[[i]], j]]
f[A, 2, 4] // MatrixForm
$endgroup$
f[A_?MatrixQ, i_Integer, j_Integer] := With[B = Transpose@Insert[Delete[A, i], A[[i]], j],
Transpose@Insert[Delete[B, i], B[[i]], j]]
f[A, 2, 4] // MatrixForm
answered Mar 21 at 15:39
Okkes DulgerciOkkes Dulgerci
5,4141919
5,4141919
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
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%2fmathematica.stackexchange.com%2fquestions%2f193640%2fchanging-the-position-of-rows-and-columns-in-a-matrix%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$
closely related/ possible duplicate: Move element inside a list
$endgroup$
– kglr
Mar 20 at 17:21
$begingroup$
FWIW: your matrix is called a Hankel matrix.
HankelMatrix[Range[5], Range[5, 9]]
$endgroup$
– J. M. is slightly pensive♦
2 days ago