2017-01-12 5 views
1

Я даюсь таблицу с двумя столбцами - один P_in и другой P_out:Как использовать находку() в MATLAB, чтобы найти десятичные

P_in = table(:,1); 
P_out = table(:,2); 

Я также дал подмножество P_in, который Я называю P_in2. Я хочу найти соответствующее значение P_out, которое принадлежит P_in2.

Я попытался находка():

P_out2_idx = find(table(P_in2,2)); 
P_out2  = table(P_out2,idx,2); 

Но найти() может иметь дело только с целыми числами. Моя таблица, однако, не показывает целые числа, а десятичные числа. Вот три строки из таблицы:

-13.02 49.6 
-12.52 49.9 
-12.02 50.18 

Так что даже округление значений P_in2 не будет работать.

+0

Можете ли вы показать нам, как 'P_in2' определяется? – obchardon

ответ

2

Использование ismember полезно для поиска нескольких индексов, если ваши числа целые. Для чисел с плавающей точкой более безопасным способом является использование ismembertol:

isInP_in2 = ismembertol(P_in, P_in2, eps); 
P_out2 = P_out(isInP_in2); 

Возвращаемый массив isInP_in2 является логическим массивом размером P_in, который true по индексам, где значения в P_in2 обнаруживаются, и false в противном случае.

Третий аргумент - это допуски, используемые для сопоставлений (здесь мы принимаем относительную точность с плавающей запятой eps). Например, при поиске для одного индекса с использованием find будет сделано:

idx = find(abs(P_in - P_in2(1)) < eps); 
+0

можно было бы сказать: isInP_in2 = ismembertol (P_in -3, P_in2, eps); ? Чтобы найти все значения P_in2, которые находятся в P_in-3? –

+0

Да, это должно сработать. Чтобы быть ясным: скажем, у вас есть 'P_in = [1 2 3]' и 'P_in2 = [- 2 -4]', вы хотите найти индексы '[1 3]'? – buzjwa

+0

Когда P_in = [1 2 3] и P_in2 = [- 2 -4], я хочу найти индекс 1, потому что P_in (1) -3 = -2. Если P_in = [1 2 3] и P_in2 = [- 2 1 0], я хочу найти индексы 1 и 3, потому что P_in (1) -3 = -2 и P_in (3) -3 = 0. –