2016-05-18 2 views
0

Пусть говорят, у меня есть матрицаКак найти значение из матрицы

A=[0.8 0.9 0.7 0.5 0.3 0.8 0.2 0.1]; % 8 points 

где A происходят из логического 1 из B

B=[1 0 1 0 0 1 0 1 0 1 1 0 1 1]; 

Как я хочу найти местоположение C что удовлетворяет

C=find(A<0.6 & A>0.35) 

, где ans - C=4. Мой вопрос: как получить истинное место в B=8?

+1

как о B (C)? – drorco

+0

у меня есть 1. но я хочу найти место – Acobot

+0

Я все еще не могу получить изображение, как «A» и «B» подключены, и что вы подразумеваете под ** истинным местоположением в B = 8 **. В 'B' нет элемента' 8', ни в 'A'. – Crowley

ответ

1

Если у вас нет указателей, хранящихся где-то вдали, я не вижу, чтобы у вас был большой выбор.

tmp = find(B); 
idx = tmp(C); 

В случае, если вы действительно хотите использовать это отображение более чем один раз, я хотел бы предложить вам хранить индексы вместо двоичного вектора. Это также будет более эффективным с точки зрения памяти, если бинарный вектор разрежен (или не является логическим вектором), так как вам потребуется меньше записей.

В случае, если вам также нужен бинарный вектор, вы должны хранить оба в случае, если позволяет память. Когда я сделал такое отображение в Matlab, я фактически использовал как бинарный вектор (маску), так и индексный вектор. Это спасло меня от первого сопоставления маски с индексом, а затем индексацию в отфильтрованную позицию (так сказать, пропуская часть tmp = find(B); idx = tmp(C); каждый раз и переходите непосредственно к idx = allIdx(C)).

+0

дорогой patrik, я получаю ошибку для функции idx = allIdx (C). Это функция сборки? – Acobot

+0

@Acobot 'allIdx' не является функцией. Это подразумевалось как пример вектора, в котором вы храните те, что содержатся в B 'allIdx = find (B);'. Первые две строки будут делать трюк и 'allIdx = find (B);' избавит вас от повторения этих строк каждый раз, когда вы хотите использовать индексы из B. Это как-то подразумевает, что это какая-то модельная информация, которая делает не выходить за пределы области действия в конце функции (например, вы используете структуру как вход и выход). – patrik

+0

thanx patrik, я получил его – Acobot

0

Это поможет вам индекс в B

A=[0.8 0.9 0.7 0.5 0.3 0.8 0.2 0.1]; 
B=[1 0 1 0 0 1 0 1 0 1 1 0 1 1]; 
C=find(A<0.6 & A>0.35); 
temp=0; 
for i=1:size(B,2) 
    temp=temp+B(i); 
    if(temp==C) 
     break; 
    end 
end 
locationB=i; 
locationB 
+0

Почему вы используете 'i' в качестве счетчика, когда он зарезервирован для мнимой единицы? – Crowley

+0

@ Crowley 'i' или' j' или '1i' могут использоваться для воображаемой единицы. Это не значит, что его нельзя использовать. '1i' фактически зарезервирован. –

+0

Я попытался перезаписать 'i' и оценить' 3 + 5 * 1i', и никаких помех нет. Значит, ты прав. Тем не менее, я буду осторожен, потому что перезапись 'i' и использование сложного числа в форме' 3 + 5 * i' вызовут неожиданные и едва прослеживаемые ошибки. – Crowley

Смежные вопросы