我有两个矩阵X and Y
,都是有序的mxn
。我想创建一个新的有序矩阵O,以mxm
使i,j th
该新矩阵中的每个条目都分别通过将函数应用于ith
和jth
行X
和来Y
计算。在我的情况m = 10000
和n = 500
。我尝试使用循环,但这需要永远。有有效的方法吗?
我的目标是两个功能点积-dot(row_i, row_j)
和exp(-1*norm(row_i-row_j))
。但是我想知道是否有一种通用方法可以插入任何功能。
解决方案1
对于第一种情况,您似乎可以在转置后简单地使用矩阵乘法Y
-
X*Y'
如果您要处理复数-
conj(X*ctranspose(Y))
解决方案#2
对于第二种情况,您需要做更多的工作。您需要使用bsxfun
withpermute
重新安排尺寸并采用原始形式的norm
计算,最后squeeze
要获得2D数组输出-
squeeze(exp(-1*sqrt(sum(bsxfun(@minus,X,permute(Y,[3 2 1])).^2,2)))
如果您想避免squeeze
,则可以使用两个permute
-
exp(-1*sqrt(sum(bsxfun(@minus,permute(X,[1 3 2]),permute(Y,[3 1 2])).^2,3)))
我还建议您研究此问题-在Matlab中有效计算成对平方的欧几里得距离。
总之,没有一个共同的,可能被用于每一个功能最有效的方式ith
和jth
如果你仍然一意孤行在该行X的,你可以使用匿名函数处理有bsxfun
,但恐怕也不会成为最有效的技术。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句