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

时间:2015-02-27 05:46:06

标签: matlab

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

 A=[ 10 10  5
    2   6   1
    3   7   2
    6   10  5
    4   8   6
    7   1   7
    8   12  8]

是7x3维度

和另一个数组

B=  [4 6 7]

是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]

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

有可能吗?感谢。

1 个答案:

答案 0 :(得分: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

<强>解释

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

第一个参数是您要执行的操作。 @gt是&#34;大于&#34;运营商>。您还可以使用@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 ]

匹配A的尺寸。然后bsxfun只是按元素应用>操作。