如何定义一个可以在matlab中获取数组输入的二维离散delta函数
how to define a 2d discrete delta function that can take array input in matlab
function y = dd2(x1,x2)
y=0;
if x1==0 && x2==0
y=1;
end
这是行不通的,因为输入不能是数组。
我希望它可以用于 1*m 的数组 X 和 1*n 的数组 Y
所以当你 dd2(X,Y) 它创建一个 m*n 矩阵,其中 X=0,Y=0 的位置为 1,否则为零
有没有已经在matlab中实现的功能? (就像一个 2D 离散增量函数)我没有找到它。我想要的 dirac(x) 将 return inf 为零。有没有办法将 inf 更改为 1?谢谢
有一个名为 bsxfun
的神奇函数,它几乎可以完成 MATLAB 中的所有操作,并且肯定会在这里找到另一个完美的设置。它的实现看起来像这样 -
y = bsxfun(@and,x1(:)==0,x2(:).'==0)
示例 运行,x1
为 1x4
,x2
为 1x6
-
x1 =
0 -1 -1 0
x2 =
-1 -1 -1 -1 0 0
y =
0 0 0 0 1 1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 1 1
查看 0
在 x1
、x2
和 1
在输出 y
中的位置以验证结果。
一般案例解决方案
对于一般情况,您可以像这样定义一个 anonymous function -
func1 = @(x1,x2) x1==0 & x2==0
然后,在 bsxfun
内使用它以获得所需的输出 -
y = bsxfun(func1,x1(:),x2(:).')
因此,对于每个新的条件语句,您只需要更改 func1
!例如,您可以在其中添加一个条件语句 -
func1 = @(x1,x2) x1==0 & x2==0 | x1 <0
function y = dd2(x1,x2)
y=0;
if x1==0 && x2==0
y=1;
end
这是行不通的,因为输入不能是数组。 我希望它可以用于 1*m 的数组 X 和 1*n 的数组 Y 所以当你 dd2(X,Y) 它创建一个 m*n 矩阵,其中 X=0,Y=0 的位置为 1,否则为零
有没有已经在matlab中实现的功能? (就像一个 2D 离散增量函数)我没有找到它。我想要的 dirac(x) 将 return inf 为零。有没有办法将 inf 更改为 1?谢谢
有一个名为 bsxfun
的神奇函数,它几乎可以完成 MATLAB 中的所有操作,并且肯定会在这里找到另一个完美的设置。它的实现看起来像这样 -
y = bsxfun(@and,x1(:)==0,x2(:).'==0)
示例 运行,x1
为 1x4
,x2
为 1x6
-
x1 =
0 -1 -1 0
x2 =
-1 -1 -1 -1 0 0
y =
0 0 0 0 1 1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 1 1
查看 0
在 x1
、x2
和 1
在输出 y
中的位置以验证结果。
一般案例解决方案
对于一般情况,您可以像这样定义一个 anonymous function -
func1 = @(x1,x2) x1==0 & x2==0
然后,在 bsxfun
内使用它以获得所需的输出 -
y = bsxfun(func1,x1(:),x2(:).')
因此,对于每个新的条件语句,您只需要更改 func1
!例如,您可以在其中添加一个条件语句 -
func1 = @(x1,x2) x1==0 & x2==0 | x1 <0