How can call a vector element using index in the condition of if_else loop?

1 次查看(过去 30 天)
Here in this code the R is a vector and using find I identified the indexes of specified number and save them to vectors m, n, o, p. Now by using the vector I want to fill the random numbers between 5 and 40 so I developed the following code. But I am not getting desired result.
R=P(:,6);
m =find(R==40);
n =find(R==25);
o =find(R==15);
p =find(R==8)
for k= 1:6160
if k==k.m
R(k,1)=randi([5 40],:,1);
elseif k==k.n
R(k,1)=randi([5 40],:,1);
elseif k==k.o
R(k,1)=randi([5 40],:,1);
elseif k==k.p
R(k,1)=randi([5 40],:,1);
end
end
R

采纳的回答

SALAH ALRABEEI
SALAH ALRABEEI 2021-6-7
% Try this
R=P(:,6);
m =find(R==40);
n =find(R==25);
o =find(R==15);
p =find(R==8)
for k= 1:6160
if ismember(k,m)
R(k,1)=randi([5 40],1);
elseif ismember(k,n)
R(k,1)=randi([5 40],1);
elseif ismember(k,n)
R(k,1)=randi([5 40],1);
elseif ismember(k,n)
R(k,1)=randi([5 40],1);
end
end
R
  3 个评论
Walter Roberson
Walter Roberson 2021-6-7
So all of the R=40 should result in the same random number for all positions? And all of the 25 should result in the same random number as each other, but different from the R=40?

请先登录,再进行评论。

更多回答(2 个)

SALAH ALRABEEI
SALAH ALRABEEI 2021-6-7
编辑:SALAH ALRABEEI 2021-6-7
% A faster way
R(m,1)=randi([5 40],length(m),1);
R(n,1)=randi([5 40],length(n),1);
R(o,1)=randi([5 40],length(o),1);
R(p,1)=randi([5 40],length(p),1);

Walter Roberson
Walter Roberson 2021-6-7
R=P(:,6);
m =find(R==40);
n =find(R==25);
o =find(R==15);
p =find(R==8)
k = [m;n;o;p];
nk = length(k);
R(k,1) = randi([5,40],nk,1);

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2012a

Community Treasure Hunt

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

Start Hunting!

Translated by