2017-05-03 124 views
0

我在Matlab中有一个矩阵,我想从中删除一些列。我也有一个带有我想要删除的索引的向量。我该如何做到这一点?通过逻辑阵列从矩阵中删除列:Matlab

train_data % My input matrix with size 1500x773 
toremove  % 1x773 logical vector values (0,1), 1 at 40 indices 

如何申请toremovetrain_data去除期望指标?

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

我的输入是具有该大小的train_data,而输出是列的简化矩阵,因为我想删除逻辑值在toremove等于1的索引。 –

+0

@SardarUsama现在是否清楚? –

+0

对不起,但我应该发布什么?我有一个输入train_data和矢量toremove,我希望输出是一个简化的矩阵,但我不知道如何申请去除train_data矩阵。 –

回答

0

如果你想删除列在二维矩阵基于关维列矩阵:

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

如果它是需要删除而不是基于关1D行矩阵行:

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

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

+0

似乎是的。谢谢。 –

+0

按照OP的要求,这将删除行而不是列。 @JoseRamon这是你想要的吗? – m7913d

+0

糟糕,我读错了,在这种情况下只是倒过来;我将编辑我的回答 –

1

如果你的数组是真正的逻辑(true/false),你可以直接使用它进行索引,但它听起来像是二进制(0/1),所以你可以使用logical(toremove)将它转换为逻辑,然后很简单:

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

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

+0

准确地说我要发布的内容。 –

+0

干杯@Sardar,慢慢地试图从SO用户中挤出'发现'习惯! – Wolfie

+0

好点;不确定OP是否总是有逻辑值,所以建议找到扩大到其他数字。 我得到downvote的意图,但我认为是保留它的答案没有用。 OP显然确实有用... –