2015-10-14 3 views
-2

Я хотел бы скрытые три <1xN cell> (A, B и C) в единую Nx3 матрицы. Может ли кто-нибудь помочь мне в этом?сотового массив преобразования матрицы в MATLAB

C={{1xN}; {1xN}; {1xN}}; 

где каждый N представляет собой число в одиночных кавычках, например,

C = {{'123123' ,'12324', ....N times}; {'123123', '12324', ....N times}; {'123123', '12324' ,....N times}} 

Поскольку несколько из них упомянули о смешном вводе, это является причиной его наличия в вышеуказанной форме.

Три вложенных массива ячеек представляют собой результаты регулярного выражения, где мои строки и выражения являются строками. Поэтому я имею вывод regexp как трех ячеек массивов векторов строк. .

node_ids=regexp(nodes,'(?<=node id=")\d*','match'); 

я могу использовать функцию кошки, а затем использовать str2double для всех трех клеточных массивов и, наконец, образуют матрицу по cell2mat. .

node_ids=cat(1,node_ids{:});node_ids=str2double(node_ids); 

Но это занимает больше времени и имеет больше LOC. Мой вопрос в том, можно ли это сделать с меньшим количеством строк кода?

Я попытался с помощью функции cat, но получаю эту ошибку:

Cannot support cell arrays containing cell arrays or objects.

+2

Разум говорит нам, что * в * клетках? – Adriaan

+0

C = {{1xN}; {1xN}; {1xN}}; где каждый N является числом в одинарных кавычках (например, C = {{'123123' '12324' .... N раз}; {'123123' '12324' .... N раз}; {'123123' '12324' .... N раз}} надеюсь, что это дает больше ясности по поводу вопроса –

ответ

1

Вашего ввод данных являются очень плохо .... почему вы используете вложенный массив ячеек, где каждый элемент является строкой?

В любом случае, если предположить C ваши первоначальные входные данные, выполните следующие действия:

C = {{'123123' '12324'}; {'123123' '12324'}; {'123123' '12324'}}; 
out = cellfun(@(x) cellfun(@str2num, x, 'uni', 0), C, 'uni', 0); 
out = cell2mat(cellfun(@cell2mat, out, 'uni', 0)); 

Первая линия некоторые фиктивные данные. Следующая строка сначала проходит через каждый вложенный элемент ячейки над массивом ячеек и преобразует строки в числа. Однако они все еще находятся в массивах ячеек. Таким образом, следующая строка преобразует каждый массив ячеек во вложенную ячейку в матрицу, затем мы объединяем все ячейки вместе в одну конечную матрицу.

Получает:

>> out 

out = 

     123123  12324 
     123123  12324 
     123123  12324 
+2

«Довольно плохо» приятно! – IKavanagh

+0

Эй, ребята @IKavanagh, я отредактировал мой вопрос для использования этого типа входных данных. использовал этот метод, и я получил следующую ошибку: Ошибка с использованием str2num (строка 33) Требуется ввод строкового или символьного массива.Я использовал str2double вместо этого и не получил ошибок, но вместо этого получил значения NaN в моей матрице. Любая причина для этого? –

+1

@ EyesOfÖzil Если вы получите эту ошибку с помощью вышеуказанного метода, ваш ввод будет искажен, а не как описано в вопросе или демонстрацией в этом ответе. Этот ответ отлично работает для меня. Может быть, вы можете опубликовать конкретные данные, которые вызывают проблему? – IKavanagh

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