# how to generate cell array based on the size of it.

2 vues (au cours des 30 derniers jours)
jaah navi le 24 Juin 2021
My command is B = arrayfun(@(N) randi(2,1,N), repelem((1:3).',5), 'uniform', 0)
when i run it generates B= 15×1 cell array
{[ 2]}
{[ 1]}
{[ 3]}
{[ 3]}
{[ 2]}
{1×2 double}
{1×2 double}
{1×2 double}
{1×2 double}
{1×2 double}
{1×3 double}
{1×3 double}
{1×3 double}
{1×3 double}
{1×3 double}
but the values inside the array are
1
1
2
1
2
[2,1]
[2,1]
[1,2]
[2,2]
[1,1]
[2,2,1]
[1,2,1]
[2,2,2]
[1,1,1]
[2,1,2]
Actually i need to get
1
1
3
1
1
for first 5 rows the value should be 1 as it is 1x1 double
[1,2]
[2,1]
[3,2]
[3,2]
[2,1]
for the next 5 rows the values should be 1,2 and not more than 2, and should not have 2 by leaving 1
[1,2,1]
[3,1,3]
[2,3,3]
[1,2,2]
[3,3,1]
for the next 5 rows the values should not have 3 by leaving 2 and should not have 2 by leaving 1.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

Mohammad Sami le 24 Juin 2021
I am bit confused what you mean by should not have 3 by leaving 2 and should not have 2 by leaving 1.
I assume you just want the numbers in order 1,2,3.
B = arrayfun(@(N) colon(1,N), repelem((1:3).',5), 'UniformOutput', false)
B = 15×1 cell array
{[ 1]} {[ 1]} {[ 1]} {[ 1]} {[ 1]} {[ 1 2]} {[ 1 2]} {[ 1 2]} {[ 1 2]} {[ 1 2]} {[1 2 3]} {[1 2 3]} {[1 2 3]} {[1 2 3]} {[1 2 3]}
##### 11 commentairesAfficher 9 commentaires plus anciensMasquer 9 commentaires plus anciens
jaah navi le 5 Juil 2021
Thanks it works. Also, I would like to check the following issue.
Based on the above command
A = arrayfun( @my_rand, repelem((1:5).',300)', 'UniformOutput', false);
function seq = my_rand(N)
if N == 1
seq = 1;
return;
end
max = randi(N);
s1 = randperm(max);
s2 = randi(max,1,N-max);
seq = [s1 s2];
seq = seq(randperm(N));
end
B = arrayfun( @my_rand, repelem((1:5).',300)', 'UniformOutput', false);
function seq = my_rand(N)
if N == 1
seq = 1;
return;
end
max = randi(N);
s1 = randperm(max);
s2 = randi(max,1,N-max);
seq = [s1 s2];
seq = seq(randperm(N));
end
Here, I am having two array A and B
when I run the code i can get the A and B
But the difference between A and B is very large. As 900 array are created for A and B is there any way to create the maximum number same values in both A and B. For example 800 array should be generated as equal and the rest 100 can be different. could you please help me on it.
Mohammad Sami le 6 Juil 2021
You can simply generate A or another variable. Then you can use randperm to sample A to get B. For example if you have an array of 20 values and you want to choose 10, you can do like this.
if true
A = 1:2:40;
B = A(randperm(20,10));
end

Connectez-vous pour commenter.

### Plus de réponses (1)

jaah navi le 15 Juil 2021
The following code executes as per required.
A = arrayfun( @my_rand, repelem((1:24).',500), 'UniformOutput', false);
function seq = my_rand(N)
if N == 1
seq = 1;
return;
end
max = randi(N);
s1 = randperm(max);
s2 = randi(max,1,N-max);
seq = [s1 s2];
seq = seq(randperm(N));
seq = sort(seq);
end
But in addition I want the above code to execute
10x1 double, 10x2 double, 10x3 double,......, 10x24 double instead 1x1 double, 1x2 double, 1x3 double,......, 1x24 double.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Structures dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by