2016-01-12 5 views
1

У меня есть матрица типов данных ячейки, содержащая заголовок и большое количество строк.MatLab найти номер столбца массив текстовых ячеек

выборка данных:

set   press  dp 
32.7045  17.805965 123.75047 
32.690094 17.80584 123.74992 
32.6232  17.815094 123.790115 

Я пытаюсь найти индекс определенного столбца с помощью команды STRCMP для поиска по всем данным.

dpCol = strcmp([data{:}], 'dp') 

Это всегда возвращает

dpCol = 

    0 

Могу ли я использовать тип ячейки данных неправильно или что-то? Спасибо!

+2

Чтобы понять, почему ваш код не работает, ознакомьтесь с промежуточным результатом '[data {:}]'. Это определенно не то, что вы хотите. – Daniel

+0

Пробовал другие опции, такие как '[date {1,:}]', но это не помогло ... – Bro2ma

ответ

2

Попытка с помощью мобильного обозначения, чтобы получить только 1-й строки, например:

data(1,:) = {'set','press','dp'} 

вместо распаковки * весь массив ячеек, так как strcmp может работать на клеточных массивах.

>>> data = {'set'   'press'  'dp' 
32.7045  17.805965 123.75047 
32.690094 17.80584 123.74992 
32.6232  17.815094 123.790115} 

data = 

    'set'  'press'  'dp'  
    [32.7045] [17.8060] [123.7505] 
    [32.6901] [17.8058] [123.7499] 
    [32.6232] [17.8151] [123.7901] 

>>> col_idx = strcmp(data(1,:),'dp') 

col_idx= 

    0  0  1 

Затем возвращают dp с использованием логических индексов и cell2mat ...

>>> dp = cell2mat(data(2:end,col_idx)) 
dp = 

    123.7505 
    123.7499 
    123.7901 

или распаковывать * и сцепить разделенный запятыми список

>>> dp = [data{2:end,col_idx}] 

dp = 

    123.7505 123.7499 123.7901 

В качестве альтернативы попробуйте cell2struct ,

>>> datastruct = cell2struct(data(2:end,:),data(1,:),2) 
datastruct = 

3x1 struct array with fields: 

    set 
    press 
    dp 

Тогда dp является ...

>>> dp = [datastruct.dp] 

dp = 

    123.7505 123.7499 123.7901 

* Используя оператор двоеточия внутри фигурных скобок распаковывает массив клеток в запятую. Использование квадратных скобок по горизонтали объединяет список, разделенный запятыми, который возвращает массив символов set pressdp{{{, поскольку первый элемент в списке представляет собой массив символов. Символы мусора между и после 'set', 'press' и 'dp' вызваны чтением парных разрядов как char. IE: char(32.7045) - эквивалент ASCII пробелов. Массивы всегда распаковываются как столбцы.

+0

Спасибо, Марк, делает именно то, что мне нужно. Возникла другая проблема, связанная с ошибкой «Ошибка при использовании cat . Размеры конкатенированных матриц несовместимы. Ошибка в cell2mat (строка 83) m {n} = cat (1, c {:, n}); Ошибка в OpenFile (строка 38) dp = cell2mat (data (2: end, col_idx)) 'Пробовал заменять col_index номером столбца, также не помогает. – Bro2ma

+0

Альтернативный вариант возвращает результаты, но все они находятся в одной ячейке. Все результаты конкатенируются один за другим. – Bro2ma

Смежные вопросы