Hi, for the attached case, snippets are not yielding correct results, I have a smaller list with N rows and 2 columns, and I want to search them inside a bigger list temp with M rows and two columns. Also if I want to search the otherway around. In both cases it should consider each row as a whole entity and when found accumulate its index in a vector. Is it possible without loops? I will appreciate if the snippet is as general as possible i.e. it can cover most of the test cases. Thanks in advance for your time, Best Regards, Wasim
find a row in a multidimensional cell array
2 views (last 30 days)
Show older comments
Hi, I have a cell variable as follows, temp =
'FBgn0039563' 'FBgn0259937' [0.6195]
'FBgn0039563' 'FBgn0024733' [0.5698]
'FBgn0039563' 'FBgn0011236' [0.5247]
'FBgn0039563' 'FBgn0053864' [0.5155]
'FBgn0039563' 'FBgn0035951' [0.5781]
'FBgn0039563' 'FBgn0001224' [0.5462]
'FBgn0039563' 'FBgn0002914' [0.5162]
'FBgn0039563' 'FBgn0264492' [0.8405]
'FBgn0039563' 'FBgn0000259' [0.7570]
'FBgn0039563' 'FBgn0004103' [0.5374]
I want to search a key =['FBgn0039563' 'FBgn0264492' [0.8405]] inside temp. I need the row index of key in temp. Is it possible?
Thanks in advance,
Best Regards, Wasim
Accepted Answer
the cyclist
on 4 Jul 2017
Edited: the cyclist
on 4 Jul 2017
Here is one way:
% Your variables
temp = { ...
'FBgn0039563' 'FBgn0259937' [0.6195]
'FBgn0039563' 'FBgn0024733' [0.5698]
'FBgn0039563' 'FBgn0011236' [0.5247]
'FBgn0039563' 'FBgn0053864' [0.5155]
'FBgn0039563' 'FBgn0035951' [0.5781]
'FBgn0039563' 'FBgn0001224' [0.5462]
'FBgn0039563' 'FBgn0002914' [0.5162]
'FBgn0039563' 'FBgn0264492' [0.8405]
'FBgn0039563' 'FBgn0000259' [0.7570]
'FBgn0039563' 'FBgn0004103' [0.5374]};
key = {'FBgn0039563' 'FBgn0264492' [0.8405]};
% Define some temporary string variables
temp2 = cellfun(@num2str,temp,'UniformOutput',false);
key2 = cellfun(@num2str,key, 'UniformOutput',false);
% Compare rows to get the index you want
rowIndex = find(all(ismember(temp2,key2),2));
2 Comments
More Answers (2)
Jan
on 4 Jul 2017
Search = {'FBgn0039563' 'FBgn0264492' [0.8405]}
Match = strcmp(temp(:, 1), Search{1}) & ...
strcmp(temp(:, 2), Search{2}) & ...
cat(1, temp{:, 3}) == Search{3};
Index = find(Match);
3 Comments
Jan
on 5 Jul 2017
@Wasim Aftab: And therefore it would be useful, if you explain the needs exactly. In your original question the key was a single row only.
Then:
Match = ismember(temp(:, 1), Search(1, :)) & ...
ismember(temp(:, 2), Search(2, :)) & ...
ismember(cat(1, temp{:, 3}), cat(1, Search{3, :}));
Andrei Bobrov
on 4 Jul 2017
find(all(ismember(temp(:,1:2),key(1:2)),2) & ismember([temp{:,3}]',key{3}))
7 Comments
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!