Написание цикла над структурами в MATLAB? - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь написать цикл, который будет обрабатывать каждое число в userIdx, а затем переходить в структуру magStruct и каждый раз через цикл брать матрицу индексов внутри этой структуры и объединять все числа в одну матрицу.Затем я хочу удалить все дубликаты чисел, чтобы у меня осталась матрица уникальных чисел всех чисел из индекса, который я хочу из чисел, указанных в функции.

magStruct - это структураи indexes - это матрица чисел.

Я написал цикл и конкатенацию чисел, но цикл дает мне ошибку, и даже тогда я думаю, что каждый элемент матрицы будет представлять собой сами матрицы, а не просточисло.Кроме того, что такое функция, которая удаляет повторяющиеся числа в матрице?Спасибо.

function coverage = getCoverage( userIdx, magStruct)
% getCoverage returns the list of magazines for users in input vector
% Input Arguments:
% userIdx = an row vector with user indexes
% magStruct = the magazineData structure
% Output Arguments:
% coverage = a list of the unique magazines that users in userIdx subscribe to

a = 0;
for k = userIdx
    mags(a) = magStruct(k).indexes;
    a = a + 1;
end

1 Ответ

1 голос
/ 23 февраля 2012

Каков размер матриц индексов в magStruct?

Если они представляют собой числовые матрицы с одинаковым количеством столбцов, их можно объединить с помощью

mag = cat(1,magStruct(userIdx).indexes);

Для того же числастроки просто меняются 1 на 2.

Чтобы удалить дубликаты, используйте UNIQUE функцию:

magunq = unique(mag);

Если матрицы индексов имеют другой размер, это немного большесложно.Вы можете сначала преобразовать их в вектор столбцов, а затем объединить таким же образом:

temp = arrayfun(@(x) x.a(:), magStuct, 'uniformoutput',0);
mag = cat(1,temp{userIdx})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...