Matlab 执行计算后从矩阵中删除列
假设我有一个有10个值的矩阵a 每个值都存在于单独的单元格中: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
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
中的其他值吗?