簡體   English   中英

Matlab匿名函數如果其他

[英]Matlab Anonymous Function If Else

在 MATLAB 中,我試圖在元胞數組上執行一個函數,但運氣不佳。 我想創建一個cellfun來檢查str2double是否返回NaN值,然后對不是NaNs的值執行str2double 我正在嘗試使用帶有 IF Else 類型語句的匿名函數,但實際上並沒有得到任何結果。 這是我到目前為止的想法:

x = cellfun(@(x)~isnan(str2double(x)),str2double(x))

但是它不起作用,有人可以幫助我嗎?

這是一個不錯的、緊湊且有效的 iif 實現:

iif = @(varargin) varargin{3-(varargin{1}>0)}

用法:

iif(condition, true_value, false_value)

如果條件計算結果為真,則函數返回真值,否則返回 false_falue。

這是一個有用的過濾器,可以應用於從 csv 或 excel 文件讀取的單元格,以便它們可以用作數字數組。 例如,在使用 xlsread 讀取的數組 Ra 上:

numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);

您可以使用邏輯索引:

x = {'1', 'NaN', '2', 'NaN'}
y = str2double(x(~isnan(str2double(x))))

y =
     1     2

這會調用str2double兩次,因此如果您必須執行一百萬次,它的運行速度可能會有點慢。

編輯:正如丹指出的那樣,如果你想改變單元格數組,請使用

x{~isnan(str2double(x))} = str2double(x(~isnan(str2double(x))))

您可以使用Loren Shure 的內聯條件來實現它:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();

那你可以試試

x = cellfun(@(y)iif(~isnan(str2double(y)), str2double(y), true, y), x, 'uni', 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM