Преобразовать массив ячеек с вложенными ячейками в числовой массив - PullRequest
0 голосов
/ 19 апреля 2019

Предположим, у меня есть A, это массив ячеек 64x1.

Каждая из 64 ячеек содержит еще одну ячейку со строкой (которая является числом, т. Е. 11)

A{1, 1}{1, 1} = ’11’ (char)
A{2, 1}{1, 1} = ’13’ (char)

Как мне создать числовой массив, такой как

A = [11,13,…]

Функция cell2mat работает только в массиве ячеек «первого уровня»: cell2mat не поддерживает массивы ячеек, содержащие массивы ячеек или объекты.

Ответы [ 4 ]

0 голосов
/ 19 апреля 2019

Преобразуйте A в список, разделенный запятыми ячеек, затем горизонтально объедините эти ячейки и, наконец, примените str2double;

A = str2double([A{:}]);
0 голосов
/ 19 апреля 2019

Я не уверен, что полностью понимаю ваш вопрос.Если я правильно понял, вы говорите о массиве ячеек типа asd ниже

asd=cell(61,1);
for ii=1:64
   asd{ii}={['test',num2str(ii)]}
end

Если я правильно понимаю вашу цель, я думаю, что следующее делает это несколько аккуратно

A=char([asd{:}])

Тогда, если вы хотите преобразовать строки в числа (что не сработает для моего теста, но может сработать для ваших строк), просто используйте str2num для этого нового вектора

0 голосов
/ 19 апреля 2019

Вы можете использовать cellfun, чтобы преобразовать содержимое каждой отдельной ячейки в A в удвоенные значения.

A{1, 1}{1, 1} = '11';
A{2, 1}{1, 1} = '13';

A_array = cellfun(@(a) str2double(a), A)

Разбивка функции: @(a) передает содержимое каждой ячейки A в переменную a, которую можно преобразовать в удвоенные значения с помощью str2double(a).

0 голосов
/ 19 апреля 2019

Это довольно просто, однако вам нужно разделить его на два шага. Предположим, у нас есть простой строковый массив 1x4:

A= {'11','13','15','17'};

Чтобы преобразовать его, вам нужно сохранить содержимое во временной переменной S, затем использовать sscanf для генерации окончательного результата:

S = sprintf('%s ', A{:});
Result = sscanf(S, '%f')

Единственная проблема в том, что это будет вектор-столбец. Если вам это нужно подряд, вы можете просто transpose(Results).

...