2013-08-11 3 views
1

В Matlab или scilab, как можно удалить избыточные записи в список объектов массива? и, возможно, сохранить его как матрицу?matlab удаляет избыточные объекты из списка объектов (массивы)

пример:

p = list(); 
p(1) = ['a' 'b' 'c']; 
p(2) = ['a' 'b' 'c']; 
p(3) = ['b' 'a' 'c'] 

Например, начиная со списка отмечено выше, я хочу, чтобы добраться до списка д а

q(1) = ['a' 'b' 'c']; 
q(2) = ['b' 'a' 'c']; 

Уникальная функция работает только в массивах, но не в списке массивов. Я могу сделать это вручную, пройдя все матрицы, но это не очень эффективно.

+3

Что вы подразумеваете под «избыточными записями»? Вы ищете уникальную функцию? Возможно, вы можете показать, что «я считаю, что это является излишней записью» - мы не можем читать ваши мысли ... Обычно «если я начну с этого, я хочу закончить с этим» способом формулировки (и «здесь что я пробовал ») - это хороший способ получить полезные ответы. – Floris

+0

Спасибо за замечание. Я вижу вашу точку зрения, я собираюсь обновить свой вопрос. – user1988908

+0

Намного понятнее! Я дам ему подумать - это немного отличается от того, как я обычно использую Matlab ... Вы пробовали играть с 'ismember'? – Floris

ответ

0

Я не знаю о встроенной функции, предназначенной для этой задачи, и я подозреваю, что ее нет. Я вижу четыре варианта:

  1. написать свою собственную функцию, которая работает со списком массивов. Вероятно, это будет неэффективно, как вы подозреваете, хотя вы можете что-то сделать с unique. К сожалению, когда вы пытаетесь сделать это, например, p(:)(2), как бы для извлечения второго элемента каждой записи списка, вы получаете Not implemented in scilab...

  2. преобразовать список массивов в матрицу. Я должен был сделать это, используя для циклов, и это требует геологического времени (если кто-нибудь знает лучший способ, я бы хотел его услышать), но как только данные будут в матричной форме, вы можете нарезать их, что может облегчить сравнение строки поэлементные:

    q = ['a' 'b' 'c'; 'd' 'e' 'f']

    then you can do stuff like

    q(:,2)

  3. сохранить данные вне и обработать его в рубине или питоне вместо (или компилировать некоторые рубиновые или питон коды и запустить его изнутри Scilab), используя свои функции обработки строк. Силы Силаба, как и Matlab, в скорости его векторных операций. Если вы не можете использовать векторизованные функции для типа структуры данных, тогда вы должны спросить, стоит ли использовать этот инструмент для этой работы (или этот тип данных - см. № 2)

  4. В зависимости от характера вашего элементы ячейки, которые вы могли бы их кодировать численно и сравнивать суммы строк: если ваши элементы действительно являются одиночными символами, то, возможно, каждый может быть преобразован в числовое значение, умноженное на коэффициент, соответствующий его позиции столбца, а затем суммируется строка. Тогда сравнение сумм каждой строки даст вам более быстрый способ идентификации дубликатов. Конечно, если ваши данные действительно «проспект акации» 21a, то ваша схема кодирования станет больше похожей на хеш, но она может быть работоспособной.

+0

Yup. Кажется, что для этого нет встроенной функции. Я думал о функции, которая переводит список массивов в 2d-матрицу. Если есть такая функция, то я могу использовать функцию 'unique 'в своих строках ... – user1988908