逻辑索引由matfile加载Matrix时失败

时间:2017-09-18 04:07:02

标签: matlab indexing mat-file

我有一个存储在.mat文件中的矩阵,然后通过函数matfile在matlab中重新加载。我还有一个逻辑索引,比如逻辑([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???

我还尝试使用results.mat标志重新保存-v7.3文件,但它没有解决问题。问题似乎是加载.mat文件,因为我创建了一个带矩阵的结构并使用了逻辑索引,它运行正常。

问题:当我将results.IV传递给IV时,为什么索引工作正常?如何使其与results.IV一起使用?

感谢您的帮助! :d

1 个答案:

答案 0 :(得分:1)

正如@Adiel在问题评论中所说。您不能使用logical索引。 因此,使用logicalnumeric索引转换为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));