使用变量

时间:2015-05-11 18:00:02

标签: matlab

假设我有一个(2x10)矩阵。

现在我有一个函数来迭代滚动这些行,执行清理过程,如果满足某些条件,则删除该行。因此该函数返回(通常)一行原始大小,有时删除该行。因此,换句话说,通过函数返回的变量来删除行。

但是,它会引发有关尺寸不匹配的错误。

所以,我可以这样做:

x(1,:) = [];

要删除第一行, 但是:

d = [];
x(1,:) = d;

出现尺寸不匹配错误。 所以,如果我给:

x(1,:) = cleaning_function(x(1,:));

并且函数决定删除该行,它将引发维度不匹配错误。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

= []是一个成语,并且不符合通常的赋值规则(它或多或少被解释为“删除LHS”)。这就是为什么你的想法不起作用的原因。正如Hoki所说,你所瞄准的结果并不是最有效的。不过,您可能还有其他问题未在您的问题中透露。如果是这样,我能想到的最接近的是使用表格:

if cleaning_function(x(1, :))
    x(1, :) = [];
end

但Hoki的想法,或类似的东西,将更清洁。例如:

rows_to_keep = cleaning_function(x);
x = x(rows_to_keep, :);

或者,甚至:

x = cleaning_function(x)

在循环内部处理细节。由于Matlab通过引用传递,因此上述内容通常不是开销。