我不知道是否可能,但我可以尝试一下:如果我有阵列
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数组中的值。
有可能吗?感谢。
答案 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
用于乘法*
,依此类推(请查看文档以获取完整列表)。
如果数组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
只是按元素应用>
操作。