我不知道是否可能,但我可以尝试一下:如果我有阵列
A=[ 10 10 5
2 6 1
3 7 2
6 10 5
4 8 6
7 1 7
8 12 8]
Run Code Online (Sandbox Code Playgroud)
这是7x3维度
和另一个数组
B= [4 6 7]
Run Code Online (Sandbox Code Playgroud)
这是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]
Run Code Online (Sandbox Code Playgroud)
我们的想法是,如果你有一个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
Run Code Online (Sandbox Code Playgroud)
说明:
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 ]
Run Code Online (Sandbox Code Playgroud)
匹配的尺寸A.然后bsxfun只需>逐个元素地应用操作.