7

次の配列があると仮定します。

a = {1; 'abc'; NaN}

ここで、これが NaN を含むインデックスを見つけて、これらを '' (空の文字列) に置き換えることができるようにしたいと考えています。

cellfunwithを使用するとisnan、役に立たない出力が得られます

cellfun(@isnan, a, 'UniformOutput', false)

ans = 
[          0]
[1x3 logical]
[          1]

では、どうすればこれを正しく行うことができますか?

4

3 に答える 3

11

確かに、あなたが自分自身を見つけたように、これはによって行うことができます

a(cellfun(@(x) any(isnan(x)),a)) = {''}

壊す:

Fx = @(x) any(isnan(x))

スカラーであるかベクトルであるかに関係なく、論理スカラーを返します。x内部でこの関数を使用cellfunすると、次の必要性がなくなります'UniformOutput', false

>> inds = cellfun(Fx,a)
inds =
     0
     0
     1

これらは、元の配列へのインデックスとして使用できます。

>> a(inds)
ans = 
    [NaN]

これにより、これらのインデックスへの割り当てが可能になります。

>> a(inds) = {''}
a = 
    [1]
    'abc'
    ''

割り当てはセル配列自体に対して行う必要があることに注意してください。これがわからない場合は、との違いを読んでa(inds)くださいa{inds}

于 2012-08-10T09:50:31.217 に答える
3

http://www.mathworks.com/matlabcentral/answers/42273で答えを見つけました

a(cellfun(@(x) any(isnan(x)),a)) = {''}

とはいえ、よくわかりません…。

于 2012-08-10T09:41:03.087 に答える
2
  • a(ind) = []配列からエントリを削除します
  • a(ind)= {''}NaNを空の文字列に置き換えます。

エントリを削除する場合は、= []代わりに= {''}.
s を別の値に置き換えたい場合は、NaN中括弧を使用してその値と等しくなるように設定します。

a(ind) = {value}
于 2012-08-10T13:10:14.773 に答える