
matlab提高效率:如何将这个循环向量化
matlab提高效率:如何将这个循环向量化目前遇到一个问题,想比较一个向量里的每一个元素和另一个矩阵中所有元素,记录相等的个数,返回该向量长度的一个数组记录个数,不知道不...
matlab提高效率:如何将这个循环向量化目前遇到一个问题,想比较一个向量里的每一个元素和另一个矩阵中所有元素,记录相等的个数,返回该向量长度的一个数组记录个数,不知道不用循环该怎么写?
展开
2个回答
展开全部
向量叉乘咯
假设一个长度为m的向量a,另一个长度为n的向量b。
c=a*b;%(m*n矩阵)
%把a进行边界延拓,变成重复性的矩阵d[1,2,3;1,2,3;1,2,3;1,2,3]这样。使和c的大小相同。具体命令忘记了
[qwe,qwe]=find(d-c.^2==0) %找出为0的个数,就是相等的个数
%大致思路是这样的,向量叉乘,避免多次循环
假设一个长度为m的向量a,另一个长度为n的向量b。
c=a*b;%(m*n矩阵)
%把a进行边界延拓,变成重复性的矩阵d[1,2,3;1,2,3;1,2,3;1,2,3]这样。使和c的大小相同。具体命令忘记了
[qwe,qwe]=find(d-c.^2==0) %找出为0的个数,就是相等的个数
%大致思路是这样的,向量叉乘,避免多次循环
追问
不太明白这句话:[qwe,qwe]=find(d-c.^2==0),为什么要对c平方,以及两个返回值qwe什么含义。。。还有就是向量长度和矩阵大小没有关系怎么办,比如说
向量A大小是m x 1的,矩阵B大小是c x d的
追答
写错了,应该是d.^2。如果a中有个数在b中,那么在c中相当于那个数自身的平方。
d是根据边界延拓来的(延拓谁,看自己需求)。平方,为的就是找出乘积结果为自己平方的那个数。
find那个是找出为0的个数,返回的应该是0的位置和个数(顺序忘记了)。
应该有方便的方法可以避免延拓,找0操作。一下子想不出
矩阵B大小是c*d,你也可以向量化啊,变成1*(c*d)的向量
就是提供个思路罢了。向量乘完就随意玩了
2016-08-28
展开全部
vector x_dx1, matrix a_mxn,
squeeze(sum(sum( repmat(reshape(x,[1 1 d]), [m n]) == repmat(a,[1 1 d]) )))
squeeze(sum(sum( repmat(reshape(x,[1 1 d]), [m n]) == repmat(a,[1 1 d]) )))
更多追问追答
追问
第一行vector什么的是干什么?
哦懂了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询