Фильтрация матрицы смежности в Matlab

У меня есть матрица смежности nx3, которая содержит узлы в первых двух измерениях и соответствующий вес в третьем измерении. Я хочу отфильтровать матрицу для определенных порогов (для индексации узлов). Например, я хочу сохранить матрицу смежности для узлов меньше 10 000, 20 000 и т. д. Каков наиболее эффективный способ сделать это в Matlab? Я попытался сделать следующее, найти индекс, соответствующий узлам:

counter = 1;
for i=1: size(graph4, 1)
   if (graph4(i,1) >30000) | (graph4(i,2) >30000)
      bucket(counter) = i;
      counter=counter+1;
   end
end

person snake plissken    schedule 15.07.2014    source источник
comment
Это рабочий код? Дает ли это желаемый результат? Что такое ведро? А для чего счетчик?   -  person Stewie Griffin    schedule 15.07.2014
comment
В основном я хочу сохранить индексы, которые после удаления из матрицы graph4.   -  person snake plissken    schedule 15.07.2014


Ответы (1)


Предположим, что матрица смежности равна A, как показано ниже:

A =    
    8    1    6
    3    5    7
    4    9    2
   11    4    9
    6    8   10
    7   12    5
   17   10   15
   12   14   16
   13   18   11

Если вы хотите, чтобы оба столбца 1 и столбца 2 были меньше значения, вы можете сделать следующее:

value = 10;
T = A(A(:,1) < value & A(:,2) < value, :)
T =    
    8    1    6
    3    5    7
    4    9    2
    6    8   10

Следующая строка, кажется, дает те же результаты, что и ваш пример кода (но не похоже, что она соответствует вашему описанию.

value = 10000;
bucket = find((A(:,1)>value) | A(:,2)>value)

Я предполагаю, что вы сделали ошибку и хотите увеличить счетчик над линией ведра и инициализировать его как counter = 0 перед циклом? Как сейчас, это будет на единицу больше, чем количество элементов в списке ведра.

person Stewie Griffin    schedule 15.07.2014
comment
Да, я хочу, чтобы оба столбца были ниже 7. - person snake plissken; 15.07.2014