code that randomly changes columns in matrix throws error

I have a matrix
This matrix consists of four rows. Some numbers are integers and some are decimals. I want to print a code on this matrix, but it gives an error like this:
Error using randperm
Size inputs must be integers.
Error in deneme (line 49)
new_idx = randperm(size(D,2)/2)*2-[1; 0];
>>
My code is :
new_idx = randperm(size(D,2)/2)*2-[1; 0];
rassalnew= D(:,new_idx(:))
What can I do to fix this problem?
Thank for help
D matrix:
1 2 3 4
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000
510.090000000000 26.4600000000000 22.3400000000000 169.680000000000
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000

 Accepted Answer

It seems to be working for that matrix D:
D = [ ...
1 2 3 4
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000
510.090000000000 26.4600000000000 22.3400000000000 169.680000000000
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000];
new_idx = randperm(size(D,2)/2)*2-[1; 0];
rassalnew= D(:,new_idx(:))
rassalnew = 4×4
3.0000 4.0000 1.0000 2.0000 22.3400 188.3000 510.0900 26.4600 22.3400 169.6800 510.0900 26.4600 22.3400 188.3000 510.0900 26.4600
But you will get that error if D has an odd number of columns:
D = [ ...
0 1 2 3 4
300 510.090000000000 26.4600000000000 22.3400000000000 188.300000000000
400 510.090000000000 26.4600000000000 22.3400000000000 169.680000000000
200 510.090000000000 26.4600000000000 22.3400000000000 188.300000000000];
new_idx = randperm(size(D,2)/2)*2-[1; 0];
Error using randperm
Size inputs must be integers.
rassalnew= D(:,new_idx(:))

7 Comments

This is a big matrix in original. so I can't manually enter the first line. How can I convert it to 1.000?
Sorry, I don't understand what you mean by, "manually enter the first line" or "convert it to 1.000". Can you please explain?
I should emphasize that the error happens whenever D has an odd number of columns, and the error has nothing to do with the contents of D (e.g., it does not matter whether the elements are integers or not). The assumption in using randperm() to rearrange the columns in pairs is that there are an even number of columns.
I understand what you mean now. Thank you for your help
If I wanted to randomly change the columns one by one, how should I do it? could i use randperm?
You're welcome!
Yes, you can use randperm() for that:
D = [ ...
1 2 3 4
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000
510.090000000000 26.4600000000000 22.3400000000000 169.680000000000
510.090000000000 26.4600000000000 22.3400000000000 188.300000000000];
new_idx = randperm(size(D,2));
rassalnew= D(:,new_idx(:))
rassalnew = 4×4
3.0000 2.0000 1.0000 4.0000 22.3400 26.4600 510.0900 188.3000 22.3400 26.4600 510.0900 169.6800 22.3400 26.4600 510.0900 188.3000

Sign in to comment.

More Answers (0)

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Tags

Asked:

on 23 Mar 2022

Commented:

on 23 Mar 2022

Community Treasure Hunt

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

Start Hunting!