2014-05-09 2 views
1

Я, имеющий большой массив структуры со следующими полями:Поиск значения в массиве структуры

x 
y 
z_value 
level 

и мне нужно выполнить поиск, основанный на состоянии, как z_value == 10 && level = 5.

В настоящее время мой код проходит от первого элемента до последнего, проверяя все значения структуры. Поскольку массив большой, его нужно выполнить ~80secs.

0 Есть other alternative(other than by using binary search,heap etc), чтобы произвести быстрый , используя конструктивные возможности matlab?

+0

ли все эти данные во всех полях этой структуры, двойные данные или может есть любые данные char тоже? – Divakar

+0

нет символьных данных в структуре – prajul

ответ

1

Предполагая-структуру, чтобы иметь только двойные данные, этот код будет получить все эти показатели, где удовлетворяются упомянутое условие -

names = fieldnames(s1) %%//s1 is your input struct 

%%// matdata = cell2mat(squeeze(struct2cell(s1)))' %%//' Approach -1 
matdata = reshape(struct2array(s1),numel(names),[])' %%//' Approach -2 
data1 = matdata(:,[find(strcmp(names,'z_value')) find(strcmp(names,'level'))]) 
index = find(ismember(data1,[10 5],'rows')) %%// indices where condition is met 
+0

забыл упомянуть, что struct содержит целые числа и double. Точнее, z_value является double, а rest - целыми. Задача при преобразовании в матрицу – prajul

+0

Все должно быть хорошо! Протестируйте это, и я надеюсь, что подход-2 будет быстрее. – Divakar

+0

«Все содержимое массива входных ячеек должно иметь один и тот же тип данных». – prajul

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