How do you circshift progressive rows an increasing amount?

2 vues (au cours des 30 derniers jours)
David Hyatt
David Hyatt le 23 Nov 2020
Commenté : David Hyatt le 25 Nov 2020
If I have a matrix:
[nan nan nan nan nan]
[ 1a nan nan nan nan]
[ 1b 2b nan nan nan]
[ 1c 2c 3c nan nan]
[ 1d 2d 3d 4d nan]
I want to change it to this:
[ 1a 2b 3c 4d nan]
[ 1b 2c 3d nan nan]
[ 1c 2d nan nan nan]
[ 1d nan nan nan nan]
[nan nan nan nan nan]
I tried:
for K = 1:length(A)
A = circshift(A(:,K),K);
Thank you.
  4 commentaires
David Hyatt
David Hyatt le 24 Nov 2020
It was going slow because of missing semicolons. Oops. I'm not sure how to turn your solution in to code to try. If you would like to provide a sample I will try it out. The code I made does the 400x400 matrix in about a second for reference.
Rik
Rik le 24 Nov 2020
I have edited my answer to include the edit I meant. Dynamically growing an array is a bad idea, as mlint is warning you. You should make it a habit of resolving every mlint warning. Either suppress them (right-click and select suppress warning on this line), or change the code.

Connectez-vous pour commenter.

Réponse acceptée

Rik
Rik le 23 Nov 2020
Modifié(e) : Rik le 24 Nov 2020
You need to index a column in A in your output as well.
for K = 1:size(A,2)
A(:,K) = circshift(A(:,K),K);
end
If you want to move every NaN to the bottom, you can also use the sort function.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by