Эффективный способ конвертировать / создавать матрицу из смешанной ячейки / строки - PullRequest
0 голосов
/ 29 апреля 2018

Иногда может быть несколько строк в другом месте, поэтому мне нужен способ найти всех в массиве ячеек. У меня есть массив ячеек, подобный приведенному ниже, и мне нужен быстрый и эффективный способ: 1) удалить пустые столбцы, 2) преобразовать ячейки, содержащие строку с «#», в число после «#» (6.504), и наконец, 3) создать или преобразовать весь массив ячеек в матрицу данных, например «данные» ниже. Есть ли умный способ сделать все это? Любые предложения высоко ценятся.

array ={ 
    [47.4500]    ''    [23.9530]    ''    [12.4590]
    [34.1540]    ''    [15.1730]    ''    [ 9.6840]
    [45.2510]    ''    [23.3770]    ''    [13.0670]
    [29.9350]    ''    [14.8680]    ''    '# 6.504'}

data =[
        47.4500   23.9530   12.4590
        34.1540   15.1730    9.6840
        45.2510   23.3770   13.0670
        29.9350   14.8680    6.5040]

1 Ответ

0 голосов
/ 29 апреля 2018

Столбцы со смешанными типами сложны в обработке, но если формат всегда соответствует шаблону регулярного выражения # \d+(?:\.\d+), вы можете действовать следующим образом:

C = { 
  47.4500   ''    23.9530   ''    12.4590
  34.1540   ''    15.1730   ''     9.6840
  45.2510   ''    23.3770   ''    13.0670
  29.9350   ''    14.8680   ''   '# 6.504'
};

% Get rid of empty columns...
C(:,all(cellfun(@ischar,C))) = [];

% Convert numeric strings into numeric values...
C = cellfun(@(x)convert(x),C,'UniformOutput',false);

% Convert the cell matrix into a numeric matrix...
C = cell2mat(C);

Где функция convert определяется следующим образом:

function x = convert(x)
    if (~ischar(x))
        return;
    end

    x = str2double(strrep(x,'# ',''));
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...