执行计算后从矩阵中删除列

时间:2014-04-01 21:17:18

标签: matlab matrix

假设我有一个包含10个值的矩阵A.

这些值中的每一个都存在于不同的单元格中:

A = [A{1}, A{2}, A{3}, A{4}, A{5}, A{6}, A{7}, A{8}, A{9}, A{10}

假设我对这个矩阵应用了一个奇怪的组合函数(很奇怪,请不要太担心这个函数实际上做了什么!;))最终给了我10个不相同的值:

B = strangef(A);
B(1,:) = [1.3, 4.2, 1.0, 2.3, 6.4, 0.9, 4.5, 2.6, 7.1, 3.1]

然后我想找到B中的最小值:

c = find(B==min(min(B)))

我发现它是A的第6个值,所以现在我想重建我的矩阵,以便它排除第6个值,如:

A = [A{1}, A{2}, A{3}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}]

我可以使用索引构建这个新矩阵,如下所示:

col = 10; %number of columns
index = setdiff(1:col, c);

然而,虽然我可以在循环的第一次迭代中使用c(列值),但是如果这个新矩阵的最小值是A {3}这个新矩阵中的列值,我的新矩阵将缺少一个值只有9列是2.

因此我实际上最终创建了这个矩阵:

A = [A{1}, A{3}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}]

而不是这一个:

A = [A{1}, A{2}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}]

这是一些伪代码

excludingMinimums = [];
col = 10;

while col>1
      index = setdiff(1:col,excludingMinimum)
      for i = 1:col
          A = [A{i}]
      end
      B = strangef(A)
      c = find(B==min(min(B)))
      excludingMinimums = [excludingMinimums, c]
      col = col - 1; 
end

2 个答案:

答案 0 :(得分:1)

逻辑索引使其比您想象的简单得多:

B = strangef(A);
A = A(:, B~=min(B));

我们可以类似地跟踪剩余的列:

col = 1:size(A,2);
while length(col)>1
    B = strangef(A);
    idx = (B == min(B));
    col = col(idx);
    A = A(:, ~idx);
end

答案 1 :(得分:1)

如何做这样的事情:保持缩小A的运行副本。删除比重建缺少元素更容易。

while size(A,2)>1
    B = strangef(A);
    c = find(min(min(B)));
    A(c) = [];   % delete the element from A
    excludingMinimums = [excludingMinimums c];  % save this vector for future output?
end

请注意删除()表示法,即使A是单元格。