Матлаб замена элементов матрицы

Обновлено: 05.07.2024

Я хочу удалить несколько конкретных значений из матрицы (если они есть). Весьма вероятно, что в матрице есть несколько копий значений.

Например, рассмотрим матрицу размером 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 является ориентированным на соединение, обеспечивая высокую надежность услуг. На обоих концах (клиенты и терминалы сервера) должны иметь один или более гнезда, так что передающий.

Читайте также: