matfile 加载 Matrix 时逻辑索引失败
Logical Indexing Failing when Matrix is loaded by matfile
我有一个矩阵存储在 .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.
我不明白是什么导致了这个问题。我之前一直在使用相同的代码并且它正在运行,唯一的问题是我之前不必加载结构结果,我已经在内存中了。
它变得更奇怪了;这有效:
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
文件有关,因为我创建了一个带有矩阵的结构并使用了逻辑索引并且它工作正常。
问题: 为什么当我将 results.IV
传递给 IV
时索引会起作用?我怎样才能让它与 results.IV
一起使用?
感谢帮助!!! :D
正如@Adiel 在问题评论中所说。您不能使用 logical
索引。
因此,使用 find
.
将 logical
索引转换为 numeric
索引
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));
我有一个矩阵存储在 .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.
我不明白是什么导致了这个问题。我之前一直在使用相同的代码并且它正在运行,唯一的问题是我之前不必加载结构结果,我已经在内存中了。 它变得更奇怪了;这有效:
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
文件有关,因为我创建了一个带有矩阵的结构并使用了逻辑索引并且它工作正常。
问题: 为什么当我将 results.IV
传递给 IV
时索引会起作用?我怎样才能让它与 results.IV
一起使用?
感谢帮助!!! :D
正如@Adiel 在问题评论中所说。您不能使用 logical
索引。
因此,使用 find
.
logical
索引转换为 numeric
索引
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));