我需要计算matlab中2个matrix之间的欧式距离。 目前我使用bsxfun和计算距离如下(我附上一段代码): for i=1:4754 test_data=fea_test(i,:); d=sqrt(sum(bsxfun(@minus, test_data, fea_train).^2, 2)); end fea_test的大小是4754×1024,fea_train是6800×1024,使用for循环导致执行for花了大约12分钟,我认为这太高了。 有没有办法计算两个matrix之间的欧氏距离更快? 我被告知,通过删除不必要的循环,我可以减less执行时间。 我也知道,pdist2可以帮助减less计算时间,但是因为我使用的是matlab版本7,所以没有pdist2函数。 升级不是一个选项。 任何帮助。 问候, 巴维亚
一如既往地试图从你那里学到更多东西,我希望能够通过下面的代码获得一些帮助。 我需要完成以下内容: 1)我有一个vector: x = [1 2 3 4 5 6 7 8 9 10 11 12] 2)和一个matrix: A =[11 14 1 5 8 18 10 8 19 13 20 16] 我需要能够将x的every值与A each值相乘,这意味着: new_matrix = [1* A 2* A 3* A … 12* A] 这会给我这个size (12*mxn) new_matrix ,假设A (mxn) 。 而在这种情况下(12*4×3) 我怎样才能做到这一点,使用matlab的bsxfun ? 而且,这个方法会比for-loop更快吗? 关于我的for-loop […]
我的问题:我注意到很多关于SO的Matlab问题的很好的答案经常使用函数bsxfun 。 为什么? 动机:在bsxfun的Matlab文档中,提供了以下示例: A = magic(5); A = bsxfun(@minus, A, mean(A)) 当然,我们可以使用以下方法进行相同的操作 A = A – (ones(size(A, 1), 1) * mean(A)); 而实际上一个简单的速度testing表明第二种方法快了大约20%。 那为什么要用第一种方法? 我猜测在某些情况下,使用bsxfun比“手动”的方法要快得多。 我真的很想看到这样的情况的例子,并解释为什么它更快。 此外,对于这个问题的最后一个元素,同样来自bsxfun的Matlab文档:“C = bsxfun(fun,A,B)将函数handle fun指定的逐个元素的二进制操作应用于数组A和B,单身扩展启用“。 “单启扩展”是什么意思?
假设我有一个matrixA ,我sorting这个matrix的行。 如何在matrixB (当然是相同的大小)上复制相同的顺序? 例如 A = rand(3,4); [val ind] = sort(A,2); B = rand(3,4); %// Reorder the elements of B according to the reordering of A 这是我想到的最好的 m = size(A,1); B = B(bsxfun(@plus,(ind-1)*m,(1:m)')); 出于好奇,任何替代品? 更新: 乔纳斯在2008a(XP)上的优秀解决scheme : n = n 0.048524 1.4632 1.4791 1.195 1.0662 1.108 1.0082 0.96335 0.93155 0.90532 0.88976 n = 2m […]
在比较bsxfun和repmat的performance之前,很less有人问到这个问题。 其中之一是: Matlab – bsxfun no longer faster than repmat? 。 这个试图调查repmat和bsxfun之间的性能比较,特别是从input数组本身沿着input数组的平均值减去input数组的平均值,并且因此将仅探索@minus部分与其等效的repmat 。 另一个是: In Matlab, when is it optimal to use bsxfun? 。 那个人试图做同样的操作减去平均沿列,并没有扩大到其他内置操作。 在这篇文章中,我试图调查bsxfun和repmat之间的性能数字,以覆盖所有的bsxfun内置bsxfun ,从而为这两个提供了更好的vector化解决scheme。 具体来说,我的这个职位的问题是: bsxfun的各种内置操作bsxfun执行对应的repmat ? bsxfun支持@plus , @minus , @times等浮点操作, @minus像@plus , @minus @times等关系和逻辑操作。那么,是否有特定的内置bsxfun可以使bsxfun加速比使用他们的repmat等值? 在她的blog post Loren bsxfun用@() A – repmat(mean(A),size(A,1),1)和@() bsxfun(@minus,A,mean(A))对bsxfun进行了基准testing。 如果我需要覆盖所有内置的基准testing,我可以使用一些其他的比较模型来处理浮点,关系和逻辑运算吗?