0

다른 변수 유형의 셀 (double & 문자열)이 있는데 셀의 숫자 요소를 반올림합니다. round 함수는 배열에만 사용할 수 있으며 셀에는 사용할 수 없으므로 cell2mat을 사용하려고합니다. 그러나이 함수는 셀에 다른 요소 유형의 경우 사용할 수 없습니다.다른 데이터 형식의 셀 배열에서 숫자 요소 만 반올림

어떻게이 셀의 숫자 요소를 반올림 할 수 있습니까? 물론 셀 요소에 대해 루프를 수행하고 싶지 않습니다.

+0

afaik를 반복하지 않고는이 작업을 수행 할 수 없습니다. 'cellfun'을 사용할 수는 있겠지만, 그건 변장의 고리 일뿐입니다. 루핑을 피하려면 세포가 잘 작동하지 않는 것으로 유명합니다. – Adriaan

답변

1

이이 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