2016-07-04 16 views
1

У меня проблема. Надеюсь, вы можете мне помочь.Организация больших наборов данных в Matlab

Я импортированы большой набор данных (200000 х 5 клеток) в Matlab, который имеет следующую структуру:

'Year' 'Country' 'X' 'Y' 'Value'

столбцы 1 и 5 содержат числовые значения, а в колонках 2 до 4 содержат строки.

Я хотел бы организовать всю эту информацию в переменный, которая будет иметь следующую структуру:

NewVariable{Country_1 : Country_n , Year_1 : Year_n}(Y_1 : Y_n , X_1 : X_n)

Все, что я могу думать о том, чтобы проходной всем наборе данных для поиска соответствий между именами переменные Country, Year, X и Y, объединяющие функции if и strcmp, но это кажется самым неэффективным способом достижения того, что я пытаюсь сделать.

Может ли кто-нибудь помочь мне?

Заранее спасибо.

+1

Напишите что-то, что функционирует в первую очередь, подумайте о оптимизации позже. – excaza

+0

Спасибо за подсказку. Дело в том, что, вероятно, есть функция, которую я не знаю, что можно использовать для этого. В противном случае мне придется перебирать весь набор данных каждый раз, когда я хочу извлечь конкретное значение, и это не реальная альтернатива, если, например, вместо 200000 записей у меня есть 5 миллионов. – aulky11

+1

ой и есть! пожалуйста, загляните в категориальный() – Finn

ответ

1

Как уже упоминалось в комментариях вы можете использовать категориальный массив:

% some arbitrary data: 
country = repmat('ca',10,1); 
country = [country; repmat('cb',10,1)]; 
country = [country; repmat('cc',10,1)]; 
T = table(repmat((2001:2005)',6,1),cellstr(country),... 
    cellstr(repmat(['x1'; 'x2'; 'x3'],10,1)),... 
    cellstr(repmat(['y1'; 'y2'; 'y3'],10,1)),... 
    randperm(30)','VariableNames',{'Year','Country','X','Y','Value'}); 
% convert all non-number data to categorical arrays: 
T.Country = categorical(T.Country); 
T.X = categorical(T.X); 
T.Y = categorical(T.Y); 
% here is an example for using categorical array: 
newVar = T(T.Country=='cb' & T.Year==2004,:); 

table класс сделан для таких вещей, и очень удобно. Просто разверните логический оператор в последней строке T.Country=='cb' & T.Year==2004 в соответствии с вашими потребностями. Сообщите мне, если это поможет;)

+0

Спасибо за полезный ответ, @EBH! Импорт данных в виде таблицы и использование категориальной функции - именно то, что мне нужно. :-) – aulky11