Matlab 二进制操作中向量的自动转置
我知道还有其他选择。但我只是好奇地想知道。当我在两个大小相同的向量之间执行一些二进制操作,例如*,-,/,+时,有时维度不匹配。例如,对于a*b,a的大小是(m,1),b的大小也是(m,1)。或者对于a-b,a,b的大小分别为(m,1)和(1,m)。有没有一种方法可以让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-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可能指的是*
,对它来说,自动换位比*