在matlab中将特定数字转换为零

Ral*_*ors 2 matlab

我不知道是否可能,但我可以尝试一下:如果我有阵列

 A=[ 10 10  5
    2   6   1
    3   7   2
    6   10  5
    4   8   6
    7   1   7
    8   12  8]
Run Code Online (Sandbox Code Playgroud)

这是7x3维度

和另一个数组

B=  [4 6 7]
Run Code Online (Sandbox Code Playgroud)

这是1x3维度,因此您可以看到列数相同.

所以这就是我想要做的,

在第1列数组A中,我希望将小于第1列数组B或4中的数值的值转换为零,而在第2列数组A中,我希望将小于第2列数组B中的数字的值转换为零,我还想在第3列阵列A中这样做.

然后输出成为:

 AB=[ 10    10  5
    0   6   0
    0   7   0
    6   10  0
    4   8   0
    7   0   7
    8   12  8]
Run Code Online (Sandbox Code Playgroud)

我们的想法是,如果你有一个mxn数组和另一个1xn数组,它会自动将这些值转换为零,这取决于1xn数组中的值.

有可能吗?谢谢.

eig*_*ris 7

bsxfun(@gt,A,B).*A 应该这样做.

我的结果是:

10    10     0
 0     0     0
 0     7     0
 6    10     0
 0     8     0
 7     0     0
 8    12     8
Run Code Online (Sandbox Code Playgroud)

说明:

MATLAB函数bsxfun允许您使用单例扩展对数组执行逐元素操作(因此它是语言最有用的函数之一).

第一个参数是您要执行的操作.@gt是"大于"运算符>.您还可以使用@plus添加+,@times乘法*等等(查看文档以获取完整列表).

如果阵列AB在尺寸上相等,则操作完成元件逐元素.如果它们不同(如上例所示),则只要一个数组具有单个维度(大小为1的维度),就会bsxfun沿该维度复制数组.

所以数组B = [4 6 7]被转换成了

[ 4 6 7
  4 6 7
  4 6 7
  4 6 7
  4 6 7
  4 6 7
  4 6 7 ]
Run Code Online (Sandbox Code Playgroud)

匹配的尺寸A.然后bsxfun只需>逐个元素地应用操作.

  • "bsxfun"的另一个完美的地方,并对它有很好的解释! (3认同)