У меня есть процесс, который итеративно и случайным образом сокращает огромный вектор целых чисел, и я хочу найти, какие элементы удаляются между каждой итерацией. Этот вектор имеет много повторений, и использование ismember() и setdiff() мне не очень помогло.
В качестве иллюстрации, если X = [1,10,8,5,10,3,5,2]:
step 0: X = 1,10,8,5,10,3,5,2
step 1: X = 1,10,8,10,3,5,2 (5 is removed)
step 2: X = 1,10,8,3,2 (10 and 5 are removed)
step 3: X = 10,8,3,2 (1 is removed)
step 4: X = 2 (10, 8 and 3 are removed)
step 5: X = [] (2 is finally removed)
Я стремлюсь найти элементы, удаленные на каждом этапе (т.е. 5 затем, 10 и 5 и так далее). Возможно, я мог бы найти слишком сложное решение, используя hist(X, unique(X))
между шагами, но я предполагаю, что в Matlab существует гораздо более элегантное (и более дешевое!) Решение.
X
и сколько в нем уникальных элементов обычно? - person Luis Mendo   schedule 12.03.2019X
содержит всего несколько тысяч элементов, не будет лиfind
достаточно быстрым? - person beaker   schedule 13.03.2019X
иY
, найдите первый элемент, гдеX ~= Y
. Это первый удаленный элемент. Теперь применим к оставшимся массивам после несоответствия. Решение O(kn), гдеk
— количество удаленных элементов, аn
— длинаX
. Однако это, вероятно, медленнее и требует больше кода, чем решениеhistc(unique)
, предложенное здесь. - person beaker   schedule 13.03.2019