Матлаб замена элементов матрицы
Я хочу удалить несколько конкретных значений из матрицы (если они есть). Весьма вероятно, что в матрице есть несколько копий значений.
Например, рассмотрим матрицу размером N на 2 intersections . Если пары значений [a b] и [c d] существуют как строки в этой матрице, я хочу их удалить.
Допустим, я хочу удалить такие строки, как [-2.0 0.5] и [7 7] в следующей матрице:
Так что после удаления я получу:
Какой самый эффективный / элегантный способ сделать это?
4 ответа
Попробуйте этот однострочник (где A - ваша матрица пересечений, а B - значение, которое нужно удалить):
Затем просто повторяйте последнюю строку для каждого нового B , которое нужно удалить.
РЕДАКТИРОВАТЬ:
. а вот еще вариант:
ПРЕДУПРЕЖДЕНИЕ: приведенные здесь ответы лучше всего использовать в случаях, когда не ожидается небольших ошибок с плавающей запятой (т. е. с целочисленными значениями). Как указано в этом дополнительном вопросе , использование операторов "==" и "
Как видите, опция STRMATCH работает быстрее, чем мое первое предложение, но мое второе предложение является самым быстрым из всех трех. Однако обратите внимание, что мои параметры и Fanfan делают несколько разные вещи: мои параметры возвращают логические индексы строк, которые нужно сохранить , а Fanfan возвращает линейные индексы строк, которые нужно удалить . Вот почему опция STRMATCH использует форму:
В то время как я использую форму:
Однако в моих индексах можно отказаться от использования первой формы (индексирование строк для удаления ):
Не уверен, когда эта функция была введена (с использованием 2012b), но вы можете просто сделать:
Вы также можете злоупотреблять функцией strmatch в соответствии с вашими потребностями: следующий код удаляет все вхождения данной строки b в матрице A
Если вам нужно удалить более одной строки, например все строки из матрицы B, выполните итерацию по ним:
Простым решением здесь является поиск функций принадлежности, то есть setdiff, union и ismember.
Посмотрите, что ismember делает с двумя массивами. Используйте опцию «строки».
Поскольку мы хотим удалить строки A, которые также находятся в B, просто сделайте следующее:
Помните, что функции принадлежности набора ищут ТОЧНОЕ совпадение. Этому требованию удовлетворяют целые числа или числа, кратные 1/2, например, в A. Они точно представлены в арифметике с плавающей запятой в MATLAB.
Если бы эти числа были действительными числами с плавающей запятой, я был бы более осторожен. Там я бы использовал допуск на разницу. В этом случае я мог бы вычислить матрицу межточечных расстояний между двумя наборами чисел, удалив строку A только в том случае, если она попала на некоторое заданное расстояние от одной из строк B.
Много функций в MATLAB® могут взять элементы существующего массива и поместить их в различную форму или последовательность. Это может быть полезно для предварительной обработки ваших данных для последующих расчетов или анализа данных.
Изменение
reshape функционируйте изменяет размер и форму массива. Например, измените форму матрицы 3 на 4 к матрице 2 на 6.
Пока число элементов в каждой форме то же самое, можно изменить их в массив с любым количеством размерностей. Используя элементы от A , создайте 2 2 3 многомерными массивами.
Транспонирование и зеркальное отражение
Общая задача в линейной алгебре состоит в том, чтобы работать с транспонированием матрицы, которая превращает строки в столбцы и столбцы в строки. Для этого используйте transpose функционируйте или .' оператор.
Создайте 3х3 матрицу и вычислите транспонировать.
Подобный оператор ' вычисляет сопряженное транспонирование для комплексных матриц. Эта операция вычисляет сопряженное комплексное число каждого элемента и транспонирует его. Создайте комплексную матрицу 2 на 2 и вычислите ее сопряженное транспонирование.
flipud инвертирует строки матрицы в направлении "сверху вниз" и fliplr инвертирует столбцы в направлении "слева направо".
Перемена и вращение
Можно переключить элементы массива определенным числом положений с помощью circshift функция. Например, создайте матрицу 3 на 4 и переключите ее столбцы направо 2. Второй аргумент [0 2] говорит circshift переключать строки 0 мест и переключать столбцы 2 места направо.
Переключать строки A 1 и сохраняют столбцы, задают второй аргумент как [-1 0] .
rot90 функция может вращать матрицу против часовой стрелки 90 градусами.
Если вы вращаетесь еще 3 раза при помощи второго аргумента, чтобы задать количество вращений, вы заканчиваете с исходным матричным A .
Сортировка
Сортировка данных в массиве является также ценным инструментом, и MATLAB предлагает много подходов. Например, sort функциональные виды элементы каждой строки или столбца матрицы отдельно в порядке возрастания или убывания. Создайте матричный A и вид каждый столбец A в порядке возрастания.
Сортировка каждой строки в порядке убывания. Второе значение аргумента 2 указывает, что вы хотите отсортировать построчный.
Чтобы отсортировать целые строки или столбцы друг относительно друга, используйте sortrows функция. Например, отсортируйте строки A в порядке возрастания согласно элементам в первом столбце. Положения изменения строк, но порядок элементов в каждой строке сохраняются.
Похожие темы
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
© 1994-2021 The MathWorks, Inc.
Для просмотра документации необходимо авторизоваться на сайтеВойти
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
Как удалить элементы в векторах и матрицах в Matlab
Я столкнулся с проблемой и хотел удалить некоторые данные в файле, поэтому я подумал об использовании Matlab для ее реализации. Код для удаления элементов в векторах и матрицах в matlab выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
1 8 15
7 14 16
13 20 22
19 21 3
25 2 9
Интеллектуальная рекомендация
Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом для чтения.
Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом чтения Fabric Файл исходного кода одиночного режима находится в ord.
Мяу Пасс Матрица SDUT
Мяу Пасс Матрица SDUT Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description Лянцзян получил матрицу, но эта матрица была особенно уродливой, и Лянцзян испытал отвращение. Чт.
Гессенская легкая двоичная структура удаленного вызова
Hessian - это легкая двоичная структура удаленного вызова, официальный адрес документа, в основном он включает протокол удаленного вызова Hessian, протокол сериализации Hessian, прокси-сервер клиента .
TCP Pasket и распаковка и Нетти Solutions
Основные введение TCP является ориентированным на соединение, обеспечивая высокую надежность услуг. На обоих концах (клиенты и терминалы сервера) должны иметь один или более гнезда, так что передающий.
Читайте также: