problems with intersect and cellfun functions
1 view (last 30 days)
Show older comments
I'm using the script below to try to find all the matches in a column of 2 excel files. The intersect function returns indices which are out of bounds for the first cell (patternsize is 41351 x 1, dataP is 2000 x 1). The first cell of "ic" is 41352, and for "id" it is 6001. The first cell of D is then blank. When I try to pass all of this on in the next line, everything blows up and I get the error 'Index exceeds matrix dimensions'. The script seemed to work fine with other files with different dimensions. I'm pretty much a novice with this, so any suggestions as to what is going wrong is greatly appreciated.
[numdataP,patternsizeP]=xlsread('state.xlsx');
[~,dataP]=xlsread('pinellas.xlsx');
[D,ic,id] = intersect(patternsizeP,dataP)
indexP=cellfun(@(x)find(ismember(dataP,x)==1),D,'uniformoutput',false)
6 Comments
jonas
on 7 Aug 2018
Edited: jonas
on 7 Aug 2018
I am the same person who worked with you previously, so I know the background.
The script works fine for me, probably because you did not include the entire data set. For some reason, xlsread grabs an empty row at the end of the excel-sheet when importing state.xlsx. That's why you get an empty cell. You should make sure to either not import this cell (either directly on import or remove it afterwards). As a first test, you can manually specify the range of cells to import from excel. I think this may solve your problem.
In addition, I believe you are only using the first column of patternsizeP so make sure to REMOVE all other columns (or better yet, don't import them). Right now you are jamming a bunch of unnecessary data into the intersect function, which is likely to cause issues.
If none of the above works, make sure to upload a segment of data for which the error is reproduced, so that we can find the bug.
I think dsb was referring to you cooperating by submitting data, don't worry about it :)
Accepted Answer
Stephen23
on 7 Aug 2018
Edited: Stephen23
on 7 Aug 2018
>> [~,~,rawS] = xlsread('state.xlsx');
>> [~,~,rawP] = xlsread('pinellas.xlsx');
>> [idxP,idxS] = ismember(rawP(:,1),rawS(:,1));
>> out = rawS(idxS(idxP),[1,1,16]);
>> out(:,2) = rawP(idxP,2)
out =
'PIN159614' 'SOO' [271]
'PIN159614' 'SO1' [271]
'PIN159614' 'SOA' [271]
'PIN159614' 'SO0' [271]
'PIN159614' 'SO3' [271]
'PIN159614' 'SO2' [271]
'PIN159614' 'SO5' [271]
'PIN159614' 'SOE' [271]
'PIN159614' 'SOD' [271]
'PIN159614' 'SOG' [271]
'PIN159614' 'SO6' [271]
'PIN725789' 'SOA' [262]
'PIN725789' 'SOC' [262]
'PIN725789' 'SOB' [262]
'PIN725789' 'SOE' [262]
'PIN725789' 'SOD' [262]
'PIN725789' 'SOG' [262]
'PIN725789' 'SOL' [262]
'PIN725789' 'SOO' [262]
'PIN725789' 'SO1' [262]
'PIN725789' 'SO0' [262]
'PIN725789' 'SO3' [262]
'PIN725789' 'SO2' [262]
'PIN725789' 'SO5' [262]
'PIN725789' 'SO7' [262]
'PIN725789' 'SO6' [262]
'PIN725789' 'SO8' [262]
5 Comments
More Answers (0)
See Also
Categories
Find more on Environment and Settings 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!