【问题标题】:convert specific number to zero in matlab在matlab中将特定数字转换为零
【发布时间】:2015-03-03 03:39:41
【问题描述】:

我不知道这是否可能,但我可以尝试一下:如果我有一个数组

 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 数组中的值是什么。

所以有可能吗?谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    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 允许您通过 单例扩展 对数组执行逐元素运算(因为它是该语言中最有用的函数之一)。

    第一个参数是您希望执行的操作。 @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 ]
    

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

    【讨论】:

    • 先生能详细回答一下吗?或根据我的问题提供示例?谢谢
    • @Raldenors 我编辑了我的答案以解释bsxfun
    • bsxfun 的另一个完美的地方,很好的解释!
    猜你喜欢
    • 2021-01-24
    • 2014-12-25
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多