Matlab 二进制操作中向量的自动转置

Matlab 二进制操作中向量的自动转置,matlab,Matlab,我知道还有其他选择。但我只是好奇地想知道。当我在两个大小相同的向量之间执行一些二进制操作,例如*,-,/,+时,有时维度不匹配。例如,对于a*b,a的大小是(m,1),b的大小也是(m,1)。或者对于a-b,a,b的大小分别为(m,1)和(1,m)。有没有一种方法可以让matlab自动匹配向量的维数并执行操作。一种简单的方法是使用 a(:)-b(:) 而不是a-b。线性索引(:)将所有内容都转换为列向量 如果其中一个操作数依次是运算的结果,例如b+c,则不能在Matlab中直接写入a(:)-(

我知道还有其他选择。但我只是好奇地想知道。当我在两个大小相同的向量之间执行一些二进制操作,例如*,-,/,+时,有时维度不匹配。例如,对于a*b,a的大小是(m,1),b的大小也是(m,1)。或者对于a-b,a,b的大小分别为(m,1)和(1,m)。有没有一种方法可以让matlab自动匹配向量的维数并执行操作。

一种简单的方法是使用

a(:)-b(:)
而不是
a-b
。线性索引
(:)
将所有内容都转换为列向量

如果其中一个操作数依次是运算的结果,例如
b+c
,则不能在Matlab中直接写入
a(:)-(b+c)(:)
。在这种情况下,您可以使用
重塑
,如下所示:

reshape(a,[],1) - reshape(b+c,[],1)

这是因为
重塑(…,[],1)
,就像
(:)
,将其参数转换为列;但是现在这个参数可以是一个操作的结果。

一个简单的方法是使用

a(:)-b(:)
而不是
a-b
。线性索引
(:)
将所有内容都转换为列向量

如果其中一个操作数依次是运算的结果,例如
b+c
,则不能在Matlab中直接写入
a(:)-(b+c)(:)
。在这种情况下,您可以使用
重塑
,如下所示:

reshape(a,[],1) - reshape(b+c,[],1)

这是因为
重塑(…,[],1)
,就像
(:)
,将其参数转换为列;但是现在这个参数可能是一个操作的结果。

小心
a*b
a*b
之间的区别!注意
a*b
a*b
之间的区别!如果b也是二进制运算的结果,您如何处理。例如,a+cd,其中b=cd。当然,我们可以说b=cd,然后仍然使用a(:)+b(:)。还有别的方法吗。我试了一张(:)+(cd)(:)。Matlab抛出了一个错误。定义一个小助手:
tocol=@(x)(x(:)
然后使用
a(:)+tocol(c*d)
@Ramakrishnankanna在这种情况下,您可以使用
重塑
。我已经更新了我的answer@LuisMendo:一如既往地回答正确。:-)但也许值得指出的是,错误消息不仅仅是一个不便之处,还有一个很好的理由,因为
*
实现了矩阵乘法,问题中建议的“自动转置”意味着引入了一个bug。@a.Donda谢谢!还有良好的观察力。OP可能指的是
*
,对于它来说,自动换位比
*
更容易想象,如果b也是二进制运算的结果,那么如何处理呢。例如,a+cd,其中b=cd。当然,我们可以说b=cd,然后仍然使用a(:)+b(:)。还有别的方法吗。我试了一张(:)+(cd)(:)。Matlab抛出了一个错误。定义一个小助手:
tocol=@(x)(x(:)
然后使用
a(:)+tocol(c*d)
@Ramakrishnankanna在这种情况下,您可以使用
重塑
。我已经更新了我的answer@LuisMendo:一如既往地回答正确。:-)但也许值得指出的是,错误消息不仅仅是一个不便之处,还有一个很好的理由,因为
*
实现了矩阵乘法,问题中建议的“自动转置”意味着引入了一个bug。@a.Donda谢谢!还有良好的观察力。OP可能指的是
*
,对它来说,自动换位比
*