2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 16:54 
В каждой ячейке массива ячеек Matlab лежит матрица, некоторые матрицы - одинаковы.
Как быстро получить массив с уникальными матрицами?

Попытался "в лоб" использовать функцию unique(A) - дает ошибку:
Используется синтаксис Matlab M
Cell array input must be a cell array of character vectors.
Error in A_Comparison (line 155)
A1=unique(A);
 

Читал справку по Матлаб - если содержимое ячеек 'char', то функция вроде должна работать.
Можно ли матрицы конвертировать в 'char', применить unique и затем уже из 'char' обратно получить матрицы?
Если можно - каким образом? (ни разу этого не делал)

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 17:24 
Нужно матрицы конвертировать в строки (reshape) и применить unique с параметром rows

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 17:34 
К сожалению, это решение работает только в случае, если все матрицы в ячейках одинакового размера((

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:19 
maximkarimov
У Вас есть какие-то соображения на предмет максимального размера матрицы?

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:25 
Да, его можно вычислить.
Вообще говоря есть такое решение: num2str для каждой матрицы, unique для массива ячеек и обратно для каждой уникальной строки символов str2num. Но это по времени то же самое получается, что обычный цикл запускать((

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:25 
P.S.
maximkarimov в сообщении #1478868 писал(а):
Можно ли матрицы конвертировать в 'char', применить unique и затем уже из 'char' обратно получить матрицы?
Если можно - каким образом?


Если хотите этот способ:
1. Решейпим каждую матрицу в строку;
2. Конкатенируем char-массив путем [num2str(firstNum) ';' num2str(secondNum) ';' ......]
3. На получившиеся строки натравливаем unique;
4. Profit!

Работать будет ооооооооооооооооооооооооооооооочень долго!
Но если там не более 10 000 матриц размера 10 х 10, то сойдёт

-- 13.08.2020, 19:26 --

maximkarimov в сообщении #1478949 писал(а):
Вообще говоря есть такое решение:

Вы меня опередили )))))

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:38 
Да!) Спасибо!

-- 13.08.2020, 20:41 --

Скажите, а если матрицу в числовую строку разворачивать, то из числовой строки обратно можно матрицу получить? Так, на будущее спрашиваю...

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:51 
maximkarimov в сообщении #1478958 писал(а):
Скажите, а если матрицу в числовую строку разворачивать, то из числовой строки обратно можно матрицу получить? Так, на будущее спрашиваю...

Да. Той же функцией reshape, причем работает мгновенно

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 20:04 
Спасибо!

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 22:15 
Аватара пользователя
ozheredov в сообщении #1478950 писал(а):
Конкатенируем char-массив путем

Лучше просто скастить в сhar...

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 22:51 
Geen в сообщении #1479033 писал(а):
Лучше просто скастить в сhar...

В принципе так быстрее. Но наверное могут возникнуть непредвиденные проблемы с форматированием. Типа вектор [1.000000001; 2.3456] после каста рискует превратиться в строку '1; 2.34'. ИМХО у низкоуровневых преобразователей больше рычагов контроля, хотя могу быть не прав

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 23:35 
Аватара пользователя
ozheredov в сообщении #1479048 писал(а):
после каста рискует превратиться в строку '1; 2.34'.

Имелось в виду преобразование типа.

 
 
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение14.08.2020, 09:46 
Geen

То что каст — это преобразование типа, я понимаю. Поэтому вначале у меня вектор в [], а потом строка в ‘’. Но преобразовывать можно по одному числу и затем ручками конструировать строку, а можно кастить в char целыми векторами и матрицами. Во втором случае можно на что нибудь нарваться. Хотя я не уверен

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group