2016-09-23 8 views
0

cellfunを条件付きで使用することは可能ですか?たとえば、144x53のセル配列があります。最初の4列はstring型で、残りは浮動小数点型です。しかし、数字の中に空のセルがあります。私の配列でcellfun(@(x)sqrt(x)、cellarray)を使用することが可能かどうかは疑問です。それがわかっているように、それは文字列と空のセルのために不可能です。そうでなければ、これは私が使用ソリューション、MATLABの条件付きセルフン

for n = 1:length(results) 
    for k = 1:length(results(1,:)) 
     if ~isstr(results{n,k}) 
      results{n, k} = sqrt(results{n,k}); 
     end 
    end 
end 

ここはベクトル化を行うことが可能であり、そうでないのですか?

+0

文字列とNaNを除外してみませんか? – GameOfThrows

+0

Sueverの答えを見ると、それはそれを解決し、同等です – GameOfThrows

答えて

0

論理配列は、各要素が数値かどうかを確認することで作成できます。そして、これを使用して数値データを含むセル配列のサブセットに対してcellfun操作を実行します。

C = {1, 2, 'string', 4}; 

% Logical array that is TRUE when the element is numeric 
is_number = cellfun(@isnumeric, C); 

% Perform this operation and replace only the numberic values 
C(is_number) = cellfun(@sqrt, C(is_number), 'UniformOutput', 0); 

% 1 1.4142 'string' 2 

として@excazaが指摘し、あなたはまた、MATLABの新しいバージョン(R2015b以降)によりパフォーマンスであるとしてループとしてそれを残して検討することができます。

+1

より新しいバージョンのMATLAB([gist](https://gist.github.com/sco1/1a0242681a43569e70c1f7ad82352b16))で等価ループアプローチが高速であることに注目して欲しいです – excaza

+0

優れた解決策 – Augusti

+0

@excaza&Sueverに注意してください。 〜 – Augusti