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がどこにあるのか、loop/cellfun/bruteforceのほかにあなたができることはあまりありません。しかし、ある程度の周期性がある場合(例えば、「文字列の後に常に2つの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 
関連する問題