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

3 visualizaciones (últimos 30 días)
jaah navi
jaah navi el 24 de Jun. de 2021
Respondida: jaah navi el 15 de Jul. de 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.
Could anyone please help me with this.

Respuesta aceptada

Mohammad Sami
Mohammad Sami el 24 de Jun. de 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 comentarios
jaah navi
jaah navi el 5 de Jul. de 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
Mohammad Sami el 6 de Jul. de 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

Iniciar sesión para comentar.

Más respuestas (1)

jaah navi
jaah navi el 15 de Jul. de 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.
Could you please help me on this.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by