Matlab matfile加载矩阵时逻辑索引失败

Matlab matfile加载矩阵时逻辑索引失败,matlab,indexing,mat-file,Matlab,Indexing,Mat File,我有一个存储在.mat文件中的矩阵,然后通过函数matfile在matlab中重新加载。我还有一个逻辑索引,如logical[1 0 1 0],我希望应用于加载的矩阵: 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); 但是,我遇到了一个问题,出

我有一个存储在.mat文件中的矩阵,然后通过函数matfile在matlab中重新加载。我还有一个逻辑索引,如logical[1 0 1 0],我希望应用于加载的矩阵:

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);  
但是,我遇到了一个问题,出现了以下错误:

'IV' cannot be indexed with class 'logical'. Indices must be numeric.
我不明白是什么导致了这个问题。我以前也使用过同样的代码,它可以正常工作,唯一的一点是我以前不必加载struct结果,我已经在内存中保存了它。 它变得更奇怪;这项工作:

IV = results.IV;
newIV = IV(:,id); % this works somehow
这也适用于:

results_raw = matfile('results.mat');
results = struct('IV',results_raw.IV);
newIV = IV(:,id); % this also works!!! why matlab, why???
我还尝试使用-v7.3标志重新保存results.mat文件,但没有解决问题。问题似乎在于加载.mat文件,因为我创建了一个带有矩阵的结构,并使用了逻辑索引,效果很好

问题:当我将结果从IV传递到IV时,索引为什么起作用?我怎样才能使它有结果呢


谢谢你的帮助!!!:正如@Adiel在提问和评论中所说的那样。不能使用逻辑索引。 因此,使用find将逻辑索引转换为数字索引


似乎您不能像matfile页面中明确记录的其他限制一样:当您将数据分配给另一个变量时,它表示为新的数据类型,工作区中的所有数据都与matfile无关。这仅在id与results.IV的维度相同时才起作用。因为results.IV是一个矩阵,所以我们需要id是一个矩阵,这样findid才能按预期工作。如果id是向量,在线性索引的情况下,那么即使findid也不起作用,因为matfile不支持线性索引。解决方案似乎是将results.IV复制到工作区中的矩阵中。
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));