0

У меня есть ячейка с различными типами переменных (двойные строки &), я хочу округлить числовые элементы в ячейке. round Функция может работать только с массивами, а не с ячейками, поэтому я пытаюсь использовать cell2mat - но эта функция не может использоваться в случае разных типов элементов в ячейке.Круглые только числовые элементы в массиве ячеек с разными типами данных

Любая идея, как я могу объединить числовые элементы в этой ячейке? Конечно, я не хочу делать петлю над элементами ячейки.

+0

Вы не можете сделать это без петли afaik. Вы можете использовать 'cellfun', но это всего лишь петля в маскировке. Клетки, как известно, трудно работать, если вы хотите избежать цикла. – Adriaan

ответ

1

Как отметил Adriaan, это может быть сделано с 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 s и где double с, вы не можете сделать кроме петли/cellfun/bruteforce. Если, однако, существует некоторая периодичность (например, «строка всегда сопровождается двумя записями double»), вы можете создать какой-нибудь вектор индексирования, который принесет вам значения без необходимости итерации (явно или неявно).

+0

это туз 12: D – GameOfThrows

+0

Dev-iL, спасибо, ваш ответ велик, но не работает для меня, если эта ячейка содержит также пустые элементы ([]) – erez

+0

@erez См. Обновленный ответ. –

1

Вы хотите использовать функцию str2double для преобразования нечисловых типов в NaN.

Скажем у вас есть клетка, как:

A = {'1.999','3.1415','pie','??'} 
B = round(str2double(A)) 

B = 

2  3 NaN NaN