匿名函数中的 If-then-else
If-then-else in anonymous function
我正在尝试在匿名函数中使用某种 if-then-else 语句,它本身是 cellfun
的一部分。我有一个包含许多双精度矩阵的元胞数组。我想用 +1 替换所有双矩阵中的所有正数,用 -1 替换所有负数。我想知道我是否可以使用匿名函数而不是编写一个单独的函数,然后从 cellfun
?
中调用
这是玩具示例:
mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2]
cellarray = repmat({mat}, 3, 1)
我正在寻找这样的东西:
new_cellarray = cellfun(@(x) if x > 0 then x = 1 elseif x < 0 then x = -1, cellarray, 'UniformOutput', false)
我也试过了,但是,显然我不允许在匿名函数中加入等号。
new_cellarray = cellfun(@(x) x(x > 0) = 1, cellarray, 'UniformOutput', false)
new_cellarray = cellfun(@(x) x(x < 0) = -1, cellarray, 'UniformOutput', false)
您可以使用 built-in 函数 sign
,其中 returns 1、0 或 -1 取决于其输入:
mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2];
cellarray = repmat({mat}, 3, 1);
new_cellarray = cellfun(@sign, cellarray, 'UniformOutput', false);
我正在尝试在匿名函数中使用某种 if-then-else 语句,它本身是 cellfun
的一部分。我有一个包含许多双精度矩阵的元胞数组。我想用 +1 替换所有双矩阵中的所有正数,用 -1 替换所有负数。我想知道我是否可以使用匿名函数而不是编写一个单独的函数,然后从 cellfun
?
这是玩具示例:
mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2]
cellarray = repmat({mat}, 3, 1)
我正在寻找这样的东西:
new_cellarray = cellfun(@(x) if x > 0 then x = 1 elseif x < 0 then x = -1, cellarray, 'UniformOutput', false)
我也试过了,但是,显然我不允许在匿名函数中加入等号。
new_cellarray = cellfun(@(x) x(x > 0) = 1, cellarray, 'UniformOutput', false)
new_cellarray = cellfun(@(x) x(x < 0) = -1, cellarray, 'UniformOutput', false)
您可以使用 built-in 函数 sign
,其中 returns 1、0 或 -1 取决于其输入:
mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2];
cellarray = repmat({mat}, 3, 1);
new_cellarray = cellfun(@sign, cellarray, 'UniformOutput', false);