我有一个存储在.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
答案 0 :(得分:1)
正如@Adiel在问题评论中所说。您不能使用logical
索引。
因此,使用logical
将numeric
索引转换为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));