用逻辑数组从矩阵中删除列:Matlab

用逻辑数组从矩阵中删除列:Matlab,matlab,matrix,Matlab,Matrix,我在Matlab中有一个矩阵,我想从中删除一些列。我还有一个向量,其中包含我要删除的索引。我怎样才能做到呢 train_data % My input matrix with size 1500x773 toremove % 1x773 logical vector values (0,1), 1 at 40 indices 我如何应用移动到列车数据以删除所需的索引 output = train_data(toremove) % I want the output to be a

我在Matlab中有一个矩阵,我想从中删除一些列。我还有一个向量,其中包含我要删除的索引。我怎样才能做到呢

train_data   % My input matrix with size 1500x773
toremove     % 1x773 logical vector values (0,1), 1 at 40 indices
我如何应用移动到列车数据以删除所需的索引

output = train_data(toremove) % I want the output  to be a matrix with size 1500x733

如果要基于一维列矩阵删除二维矩阵中的列,请执行以下操作:

output = train_data(:,find(toremove<1));
如果是需要删除的行,则根据1d行矩阵:

output = train_data(find(toremove<1),:);

如果我理解正确,我可能会做这项工作。

如果您的数组是真正的逻辑true/false,您可以直接使用它进行索引,虽然它是0/1,但听起来像是二进制的,因此您可以使用logicaltoremove将其转换为逻辑,那么它很简单:

train_data = train_data(:,~logical(toremove));
% or equivalently
train_data(:, logical(toremove)) = [];

避免调用find函数将提高速度。

我的输入是具有该大小的train_数据,而输出是一个简化的列矩阵,因为我想删除逻辑值为toremove等于1的索引。@SardarUsama现在清楚了吗?抱歉,我不知道,但我到底应该发布什么?我有一个输入,序列数据和向量toremove,我希望输出是一个简化的矩阵,但我不知道如何将toremove应用到序列数据矩阵。似乎是的。谢谢。这会按照OP的要求删除行而不是列。@JoseRamon这是你想要的吗?哎呀,我看错了,如果是这样的话,就把它倒过来;我将编辑我的答案,这正是我要发布的内容。干杯@Sardar,慢慢地试图从这么多的用户身上找到习惯!好的观点;不确定OP是否总是有逻辑值,因此建议查找以放大到其他数字。我有投票否决的意图,但我认为这是为了回答没有用的问题。OP显然觉得它很有用…@mehfoosyacoob我不同意否决票though@mehfoosyacoob我没有投反对票,这是因为Qs/As没有用,你的不是最优的,达到了同样的结果: