How do you circshift progressive rows an increasing amount?

3 次查看(过去 30 天)
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 个评论
David Hyatt
David Hyatt 2020-11-24
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 2020-11-24
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.

请先登录,再进行评论。

采纳的回答

Rik
Rik 2020-11-23
编辑:Rik 2020-11-24
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.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by