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

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

那有可能吗?谢谢。

最佳答案

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 只是逐个元素地应用 > 操作。

关于matlab - 在matlab中将特定数字转换为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28758361/

相关文章:

regex - 用于嵌套组和捕获标记的 Matlab 正则表达式

matlab - 如何在不知道名称的情况下访问 .mat 文件中的 "Value"?

c# - MATLAB 通过 .NET 调用使用的内存是否独立于 .NET 应用程序?

c - 使用 openMP 和 gcc 编译时 MEX 文件无效

matlab - 如何在具有 2 台计算机的本地网络中在 matlab 中设置并行计算?

parallel-processing - Matlab GPU计算: Process matrix as one unit

matlab - 累积和直到阈值

matlab - 从 MATLAB 中附加的 .CSV 中提取最新值

python - 在 python 和 matlab 中填充矩阵的速度

matlab - 图像处理——使用FFT放大图像(Matlab代码)