我不知道是否可行,但我可以尝试一下:如果我有一个数组
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
进行乘法 *
,等等(检查完整列表的文档)。
如果数组 A
和 B
的大小相等,则操作是逐个元素完成的。如果它们不同(如上述情况),只要一个数组具有单一维度(大小为 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/