I have a matrix that was stored in a .mat
file, and was then reloaded in matlab via the function matfile
. I also have a logical index, like logical([1 0 1 0]), that I want to apply to the loaded matrix:
results = matfile('results.mat');
% id is my logical vector of the appropriate size
% IV is a matrix stored in results.mat
newIV = results.IV(:,id);
However, I am running into a problem and getting this error:
'IV' cannot be indexed with class 'logical'. Indices must be numeric.
I do not understand what is causing this issue. I have been using this same code before and it was working, the only thing was that I did not have to load the struct results before, I already had it in memory. It gets weirder; this works:
IV = results.IV;
newIV = IV(:,id); % this works somehow
This also works:
results_raw = matfile('results.mat');
results = struct('IV',results_raw.IV);
newIV = IV(:,id); % this also works!!! why matlab, why???
I also tried resaving the results.mat
file using the -v7.3
flag, but it did not solve the problem. The issue seems to be with loading the .mat
file, because I created a struct with a matrix and used logical indexing and it worked fine.
Question: why does indexing work when I pass results.IV
to IV
? how can I make it work with results.IV
?
Thanks for helping!!! :D
As @Adiel said in questions comments. You can't use logical
indices.
So, convert logical
indices to numeric
indices using find
.
results = matfile('results.mat');
% id is my logical vector of the appropriate size
% IV is a matrix stored in results.mat
newIV = results.IV(:,find(id));