【问题标题】:Remove columns from matrix by logical array: Matlab通过逻辑数组从矩阵中删除列:Matlab
【发布时间】:2017-05-04 04:39:55
【问题描述】:

我在 Matlab 中有一个矩阵,我想从中删除一些列。我还有一个带有要删除的索引的向量。我究竟是怎么做到的?

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

如何将toremove 应用于train_data 以删除所需的索引?

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

【问题讨论】:

  • 我的输入是具有该大小的 train_data,而输出是作为列问题的缩减矩阵,因为我想删除 toremove 中逻辑值等于 1 的索引。
  • @SardarUsama 现在清楚了吗?
  • 抱歉我的无知,但我究竟应该发布什么?我有 train_data 和要删除的向量作为输入,我希望输出是一个简化的矩阵,但我不知道如何将 toremove 应用于 train_data 矩阵。

标签: matlab matrix


【解决方案1】:

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

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

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

【讨论】:

  • 正是我要发布的内容。
  • 干杯@Sardar,慢慢地试图从SO用户中挤出find的习惯!
  • 好点;不确定 OP 是否总是有逻辑值,因此建议 find 扩大到其他数字。我得到了反对的意图,但我认为 SO 将其保留为没有用的答案。 OP 显然确实发现它很有用...
  • @mehfoosyacoob 我不同意投反对票
  • @mehfoosyacoob 我没有投反对票,它用于 Qs/As 没有用,你的不是最佳的,达到相同的结果 :)
【解决方案2】:

如果您希望根据一维列矩阵删除二维矩阵中的列:

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

如果是需要删除的行,则基于一维行矩阵:

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

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

【讨论】:

  • 似乎是的。谢谢。
  • 这会删除行而不是 OP 要求的列。 @JoseRamon 这是你想要的吗?
  • 糟糕,我看错了,在这种情况下,只需反转它;我会编辑我的答案
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 2016-05-26
  • 2016-03-28
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多