2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 16:54 


26/09/17
322
В каждой ячейке массива ячеек 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 


10/03/16
3855
Aeroport
Нужно матрицы конвертировать в строки (reshape) и применить unique с параметром rows

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 17:34 


26/09/17
322
К сожалению, это решение работает только в случае, если все матрицы в ячейках одинакового размера((

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:19 


10/03/16
3855
Aeroport
maximkarimov
У Вас есть какие-то соображения на предмет максимального размера матрицы?

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:25 


26/09/17
322
Да, его можно вычислить.
Вообще говоря есть такое решение: num2str для каждой матрицы, unique для массива ячеек и обратно для каждой уникальной строки символов str2num. Но это по времени то же самое получается, что обычный цикл запускать((

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:25 


10/03/16
3855
Aeroport
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 


26/09/17
322
Да!) Спасибо!

-- 13.08.2020, 20:41 --

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

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 19:51 


10/03/16
3855
Aeroport
maximkarimov в сообщении #1478958 писал(а):
Скажите, а если матрицу в числовую строку разворачивать, то из числовой строки обратно можно матрицу получить? Так, на будущее спрашиваю...

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

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


26/09/17
322
Спасибо!

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 22:15 
Заслуженный участник
Аватара пользователя


01/09/13
4318
ozheredov в сообщении #1478950 писал(а):
Конкатенируем char-массив путем

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

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 22:51 


10/03/16
3855
Aeroport
Geen в сообщении #1479033 писал(а):
Лучше просто скастить в сhar...

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

 Профиль  
                  
 
 Re: Matlab: применение функции unique к массиву ячеек
Сообщение13.08.2020, 23:35 
Заслуженный участник
Аватара пользователя


01/09/13
4318
ozheredov в сообщении #1479048 писал(а):
после каста рискует превратиться в строку '1; 2.34'.

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

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


10/03/16
3855
Aeroport
Geen

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group