【问题标题】:Removing columns from a Matrix MatLab从矩阵 MatLab 中删除列
【发布时间】:2016-09-28 22:41:11
【问题描述】:
[1 2 3 4 5 6 7 8 9 ; 
 9 8 7 6 5 4 3 2 1 ; 
 1 2 0 0 1 0 0 0 1 ]

最后一行有五列为零。我想每个过零只保留一列。

喜欢这个

[1 2 3 5 8 9 ; 
 9 8 7 5 2 1 ; 
 1 2 0 1 0 1 ]

这是否可以通过快速的 Matlab 函数实现,还是我必须编写一些缓慢而复杂的 for 循环?

【问题讨论】:

  • 我相信你可以做类似于我在stackoverflow.com/questions/39758319/… 中解释的事情。请澄清您选择要保留哪一列的标准是什么?我之所以问,是因为您似乎在示例的第一部分保留了第一列,而在后者中保留了最后一列。
  • 您可以使用“查找零交叉”问题的答案,构造一维逻辑索引向量ind,然后mat(:,ind)=[] 删除这些列。

标签: matlab matrix indexing


【解决方案1】:

您可以通过多种不同方式创建逻辑数组来查找要删除的列。像这样的东西会起作用

% Find the zeros that are not the first zero
cols_to_remove = data(end,:) == 0 & ~diff([false, data(end,:) == 0]) == 1;

% Now remove them
data(:, cols_to_remove) = [];

【讨论】:

  • @AndrasDeak Doh。是的
  • 谢谢伙计,这很容易成为我过去十天见过的最聪明的事情。
猜你喜欢
  • 2012-06-17
  • 2016-05-26
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 2013-03-03
  • 1970-01-01
相关资源
最近更新 更多