0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 11
|
|
1 | |
Удалить элементы, которые встречаются более одного раза08.12.2013, 15:31. Показов 6656. Ответов 15
Метки нет (Все метки)
Вопрос состоит в следующем - мне нужно без цикла удалить абсолютно все повторяющиеся элементы. Функцией unique я воспользоваться не могу, так как она оставляет хотя бы один экземпляр повторяющегося элемента.
Мне надо так: a=[1,2,3,1,2], а b в таком случае равно b=[3] Как сделать это без цикла?
0
|
08.12.2013, 15:31 | |
Ответы с готовыми решениями:
15
Подпрограмма: вывести элементы массива, которые встречаются больше 1 раза Исключить из массива все элементы, встречающиеся более одного раза Напечатать все элементы, которые встречаются более одного раза Найти все элементы массива, которые встречаются в нем не более одного раза |
10.12.2013, 19:02 | 2 | ||||||||||
Так-с сегодня меня мысль посетила по этому вопросу.
Ну для начала нужно узнать, сколько раз встречаются элементы в массиве, а потом уже делать вывводы и действия Если использовать цикл, то все просто:
а другая загвоздка в том, что длинна массива х практически никогда не равна длине а, поэтому без цикла их переварить затруднительно, на первый взгляд... С другой стороны, если длины векторов разные, то это наталкивает на мысль об матричном умножении (столбец на строку дает матрицу), но нам нужно сравнить, а не умножать. можно поделить, т.е. умножить на обратное, но если там будет ноль, получим бесконечность... остается только искать разность, а такую штуку я уже делал тут Получаем:
3
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
10.09.2015, 16:30 | 3 |
Всем привет, у меня матлаб матерится на этот код:
Error using == Matrix dimensions must agree есть мысли как это пофиксить? И еще вопрос, я нигде не могу найти подробного описания функции unique, хотелось бы почитать. Пытаюсь допилить этот код, но при том мне нужно получить исходный массив x, в котором все НЕ уникальные элементы будут приравнены к нулю, а все уникальные элементы останутся на своих i-тых местах второй день ковыряюсь, что то пока не получается
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
|
10.09.2015, 16:53 | 4 |
http://www.mathworks.com/help/... nique.html
Если код у Зосимы скопировали, то там все в порядке.
1
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
10.09.2015, 17:35 | 5 |
не сомневаюсь, конечно я скопировал не полный код, у меня матрица x представляет собой вектор-столбец из 12к чисел, уникальных элементов там около 3к
Добавлено через 9 минут Пофиксил, транспонировал x в вектор-строку. Если есть мысли по основной задаче, буду очень благодарен
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
|
10.09.2015, 17:52 | 6 |
Если по этому вопросу
То в 4 строке кода Зосимы меняете [] на 0.
0
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
||||||
10.09.2015, 18:05 | 7 | |||||
конечно эта мысль была первой что пришла мне в голову , но к сожалению это не то что мне нужно, предположим у меня формируется вектор a который состоит только из уникальных элементов вектора x, мне нужно повторно перебрать вектор x (совпадает ли его элемент с каким нибудь элементом вектора а) и если совпадает оставить этот элемент, если нет - занулить. В одном цикле я не знаю получится ли это сделать, думаю нужно будет использовать цикл по i и по k для x(i) и a(k) и перебирать совпадения по каждому элементу x(i), но в этом случае почему то у меня из 3к уникальных элементов появляется только одно.
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
|
10.09.2015, 18:12 | 8 |
Arrow, А не проще занулить уникальные элементы в векторе Х?
Чем вот составлять вектор А из уникальных Х, после сравнивать их элементы и удалять совпадения из Х. Или я опять же вас не понимаю)
0
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
10.09.2015, 18:16 | 9 |
проще, только вот не работает если заменить y на x, а почему не работает пока не понимаю
Добавлено через 1 минуту с этим не большое дополнение, это число как раз последнее в векторе a , почему то остальные элементы в новый вектор не записываются
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
||||||
10.09.2015, 18:23 | 10 | |||||
А чего не получается? Вот код зануления уникальных элементов
1
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
10.09.2015, 18:37 | 11 |
почему то раньше он не срабатывал, наверно где то была ошибка, однако чутка допилил для зануления НЕ уникальных элементов. спасибо за помощь
0
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
14.09.2015, 20:41 | 12 |
Ребят, а вот такой вопрос на засыпку, код удаляет все элементы которые встречаются больше одного раза, а можно ли как то оставить первый встретившийся элемент, а остальные удалить. (то есть кроме уникальных элементов оставить еще первый не уникальный) ?
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
||||||
14.09.2015, 22:54 | 13 | |||||
1
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
15.09.2015, 12:46 | 14 |
спасибо, но может быть я не до конца описал задачу. Допустим есть у нас уникальные элементы и не уникальные, и тех и других много, но НЕ уникальные элементы это те, которые встречаются более 1 раза, можно ли оставить каждый первый НЕ уникальный элемент (то есть не самый первый (минимальный) а каждый первый).
0
|
187 / 192 / 43
Регистрация: 13.05.2013
Сообщений: 709
|
|||||||||||
15.09.2015, 16:42 | 15 | ||||||||||
Дак тупо
1
|
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 15
|
|
15.09.2015, 18:18 | 16 |
о как, спасибо
0
|
15.09.2015, 18:18 | |
15.09.2015, 18:18 | |
Помогаю со студенческими работами здесь
16
Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор В строках матрицы оставить элементы, которые встречаются более одного раза, остальные заменить нулем Оставить в строках матрицы элементы которые встречаются более одного раза, остальные заменить нулем Изменить матрицу так, чтобы в строках остались элементы, которые встречаются более одного раза, а другие заменить нулями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |