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

Matlab 执行计算后从矩阵中删除列,matlab,matrix,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} 假设我对这个矩阵应用了一个奇怪的组合函数(奇怪的F,请不要太担心这个函数的实际作用!;),结果得到了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

假设我有一个有10个值的矩阵a

每个值都存在于单独的单元格中:

A = [A{1}, A{2}, A{3}, A{4}, A{5}, A{6}, A{7}, A{8}, A{9}, A{10}
假设我对这个矩阵应用了一个奇怪的组合函数(奇怪的F,请不要太担心这个函数的实际作用!;),结果得到了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的第六个值,所以现在我想重建我的矩阵,这样它就排除了第六个值,如:

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(列值),但是如果这个新矩阵的最小值是{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

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

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

不如这样做:保留一个正在缩小的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
是一个单元格。

问题,是的,它是关于“奇怪的F”-如果我们在每次运行该函数后将
NaNs
引入
A
,这会是一个问题吗?是否会影响
B=f(A)的结果
,除了
B
中的对应元素也是
NaN
之外?这会影响
B
中的其他值吗?