假设我有一个包含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
答案 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
是单元格。