Related vector values via cell array
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi guys, I hope someone can help me:
I have a vector. Suppose this:
A=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)'
Some values of this vector are related through a cell array, in such a way that a value of the vector is the index of a cell. I need to know if a value of the vector "a" is related to another value "b".
B={15, 12, 0, [11, 7], 9, 0, [1, 20, 21], 18, 7, 0, 16, [13, 14], 17, 4, 6};
a=2; b=7
In this case, 2 and 7 are related:
Index Value
2 12
12 13,14
13 17
17 Nan
14 4
4 7
So, a=5 and b=6; and a=4 and b=1 are also related.
Thanks to the whole community
댓글 수: 5
Dyuman Joshi
2023년 8월 12일
편집: Dyuman Joshi
2023년 8월 12일
@Sergio Rojas Blanco, please check my answer.
채택된 답변
Dyuman Joshi
2023년 8월 12일
A=(1:10)';
B={15, 12, 0, [11, 7], 9, 0, [1, 20, 21], 18, 7, 0, 16, [13, 14], 17, 4, 6};
m = max([B{:}]);
z1 = nested(A,B,2,7)
%8th index is 18 which is greater than the number of elements
%so no value is related to it
z2 = nested(A,B,8,randi(m))
%3rd index is 0, so no value related to it
z3 = nested(A,B,3,randi(m))
%Similarly for 6th index
z4 = nested(A,B,6,randi(m))
z5 = nested(A,B,5,6)
%As the 1st index in B goes to the 6th index, no value will be related to it as well
z6 = nested(A,B,1,randi(m))
function z = nested(A,B,a,b)
%Returns 0 if not related, 1 if related
%Initialize z as 0
z=0;
nB=numel(B);
for m=1:numel(a)
%Assign only if the value is within the range of number of elements of B
if a(m)<=nB && a(m)>0
c=B{a(m)};
else
%If the value is not in the range, skip to the next iteration
continue
end
%Check if b is present in c or not
if ismember(b,c)
z=1;
return
else
%If not present, continue the recursion and keep checking
z=nested(A,B,c,b);
end
end
end
댓글 수: 2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!