Проверьте наличие повторяющихся записей в большом матричном матлабе

У меня есть очень большая матрица (901x1801), которую я сгенерировал путем объединения значений трех одинаковых массивов (с повторяющимися значениями в них) для создания уникальных кодов с использованием математического выражения. Матрица заполняется этими кодами.

Мой вопрос... Как я могу проверить, что каждое значение матрицы (901x1801) уникально и не повторяется ни разу?

Или... Может ли кто-нибудь сказать мне, как я могу создать матрицу, объединив три массива похожих элементов таким образом, чтобы каждое сгенерированное значение было уникальным.

ранний ответ будет очень appciable. Заранее спасибо.


person Mushi    schedule 11.04.2013    source источник
comment
вы пишете, что ваша матрица заполнена этими кодами, что-то непонятно, у вас массив содержит числа или строки (выражения)?   -  person bla    schedule 11.04.2013
comment
Матрица, которую я хочу проверить, заполнена кодами, которые я сгенерировал из трех разных массивов (чисел). Я должен использовать определенные массивы данных для генерации этих уникальных кодов. Я не могу просто использовать случайные числа.   -  person Mushi    schedule 11.04.2013


Ответы (2)


С большой матрицей M, чтобы получить все уникальные значения, используйте:

uniqueValues = unique(M(:));

Затем, чтобы понять, есть ли повторяющиеся значения, вы можете использовать:

repeatedValuesFound = numel(uniqueValues) ~= numel(M);

То есть, если массив уникальных значений имеет то же количество элементов, что и исходный массив, то все элементы исходного массива должны быть уникальными.

person Pursuit    schedule 11.04.2013
comment
Вам не нужно M(:). Уникальный всегда возвращает вектор. - person yuk; 11.04.2013
comment
Уважаемый Pusuit, к сожалению, мне приходится использовать определенные массивы данных для генерации этих уникальных кодов. Я не могу просто использовать случайные числа. Но моя основная проблема заключается в том, чтобы проверить, все ли коды в матрице (901x1801) уникальны и ни один из них не дублирует другой. Проверка такого большого массива для меня проблема. - person Mushi; 11.04.2013
comment
Кто использует случайные числа? Функция unique должна работать с любой числовой матрицей или массивом ячеек строк. - person Pursuit; 11.04.2013
comment
Извините, приятель, что не понял вашего ответа в первую очередь. Это сработало отлично. Но, к сожалению, я не могу понять, как я могу построить такую ​​матрицу без дубликатов из моих определенных массивов. Не могли бы вы помочь мне и в этом? Это может быть потому, что мои значения просто разделены на 0,2. Есть идеи.. - person Mushi; 12.04.2013
comment
Похоже, это может быть интересный вопрос о стеке. Чтобы сделать его понятным, вам нужно написать пример размером с игрушку (возможно, 4 на 3) с репрезентативными входными данными и желаемыми свойствами выходных данных. Сейчас непонятно, что вы просите. - person Pursuit; 12.04.2013
comment
Массив1 = (-180:0,2:180); Массив2 = (-90:0,2:90); Число = 100; Я хочу создать матрицу «M», объединив все три (Array1, Array2 и Num), в которой каждый отдельный элемент должен быть однозначно идентифицируемым. Размер «М» будет 1801x901. - person Mushi; 12.04.2013

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

V = M(:);                           % flatten
[Vs, Vi] = sort(V);                 % sort, Vi are indices into V
delta = Vs(2:end) - Vs(1:end-1);    % delta==0 means duplicate
dup1 = Vi(find(delta == 0));        % dup1 has indices of duplicates in V
dup2 = Vi(find(delta == 0) + 1);    % dup2 has the corresponding other 
                                    % rewrite to [row col]
[dup1(:,1) dup1(:,2)] = ind2sub(size(M), dup1);
[dup2(:,1) dup2(:,2)] = ind2sub(size(M), dup2);

Строки dup1 и dup2 теперь содержат повторяющиеся позиции в M.

person edgar.holleis    schedule 11.04.2013