如何在不使用Matlab循环的情况下有效地编写这个?

时间:2012-03-28 19:28:10

标签: matlab indexing find compare indices

dist=[1:100]; % distance

% conc. is concentration of size 1x100

conc=1  1   1   1   1   1   1   1   1   1   1   1   1   1   1   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.980000000000000   0.970000000000000   0.950000000000000   0.920000000000000   0.890000000000000   0.850000000000000   0.820000000000000   0.790000000000000   0.750000000000000   0.710000000000000   0.680000000000000   0.640000000000000   0.600000000000000   0.560000000000000   0.520000000000000   0.480000000000000   0.440000000000000   0.400000000000000   0.360000000000000   0.310000000000000   0.270000000000000   0.230000000000000   0.180000000000000   0.140000000000000   0.100000000000000   0.0700000000000000  0.0400000000000000  0.0200000000000000  0.0100000000000000  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

我想在conc中找到对应于浓度值0.16(或可能的最接近值)和0.84(或可能的最接近值)的索引。我将使用该索引在这些索引处查找dist。需要注意的一点是conc值在大小为100的向量中以非线性关系从1递减到0.我知道我们可以使用find(),但我不知道它是如何使用的用于我想做的事。

我希望能够在不使用循环的情况下有效地完成此操作。这是因为我有很多用于集中的向量,我的代码中已经有很多循环。感谢。

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是

[x, i] = min(abs(conc - 0.16));

之后i将保留索引。这比较了conc向量的每个元素,这有点浪费,因为数据是有序的,你可以进行二分搜索,但是在matlab级别实现的二进制搜索对于百元向量可能会更慢。