1

我有一个矩阵 A(319 行 × 26 列)和两个向量,分别代表一个upper_bound(319,1) 和一个lower_bound(319,1)。

我的目标是检查一组 26 条曲线(每条曲线 319 点)中是否有一些点大于或低于upper_bound/lower_bound曲线,以便在至少有一个点通过这些限制时排除一组特定的数据。

感谢Shai的建议:

>> inBounds = bsxfun(@ge, A, lowerBound) & bsxfun(@le, A, upperBound);   

并使用find&accumarray我得到了一个p包含所有索引的单元格数组。

现在我想获得另一个单元格数组,其中包含引用这些特定索引 t的所有原始值。A

我已经完成了一个for循环,但它需要太多时间。有更快的方法吗?

这是循环:

for gg=1:rows 
    h = genvarname('purge_value', who); 
    eval([h ' = A(gg,p{gg})']); 
end
4

1 回答 1

1

看不到示例代码的作用,所以我猜您想要以下三个之一:


根据您的描述,我认为可能只是这样:

A(:,inBounds);

这只会保留所有值都在范围内的系列。


相反,如果您有一个p要保留的 A 中所有值的(逻辑)索引(不是系列,而是单个值),那么您需要决定如何处理剩余的值。

出于绘图目的,您可以考虑执行以下操作:

A(~p) = NaN;

但是,如果您希望将其放入元胞数组中,则可以考虑继续执行以下操作:

myArray = cell();
for c = size(A,2):-1:1
 myArray{c} = A(isfinite(A(:,c)),c);
end
于 2013-09-11T16:44:48.240 回答