Округлять только числовые элементы в массиве ячеек с разными типами данных
У меня есть ячейка с различными типами переменных (double & strings), я хочу округлить числовые элементы в ячейке.round
функция может работать только с массивами, а не с ячейками, поэтому я пытаюсь использовать cell2mat
- но эту функцию нельзя использовать в случае разных типов элементов в ячейке.
Любая идея, как я могу округлить числовые элементы в этой ячейке? Конечно, я не хочу делать цикл по элементам ячейки.
2 ответа
Как уже упоминал Адриан, это можно сделать с cellfun
:
function testCell = q38476362
testCell = {'t','h',1.004,'s',[],'i',4.99,[],'a',[],'ce',10.8};
isnum = cellfun(@(x)~isempty(x) & isnumeric(x),testCell);
testCell(isnum) = num2cell(round([testCell{isnum}],0));
testCell =
't' 'h' [1] 's' [] 'i' [5] [] 'a' [] 'ce' [11]
Если ваш массив ячеек является случайным с точки зрения того, где string
и где double
с, вы не можете ничего сделать, кроме цикла /cellfun
брутфорс. Однако, если есть некоторая периодичность (например, за строкой всегда следуют два double
records") вы можете создать индексный вектор, который бы получал значения без необходимости итерации (явной или неявной).
Вы хотите воспользоваться str2double
возможность конвертировать нечисловые типы в NaN.
Скажем, у вас есть такая клетка:
A = {'1.999','3.1415','pie','??'}
B = round(str2double(A))
B =
2 3 NaN NaN