之前在比较bsxfun和repmat表现之间提出的问题很少.
Matlab - bsxfun no longer faster than repmat?.这个尝试研究repmat和之间的性能比较bsxfun,特别是从输入数组本身的列中执行减去输入数组的平均值,因此只会探索与其等价物相对的@minus部分.bsxfunrepmatIn Matlab, when is it optimal to use bsxfun?.那个试图通过沿列的平均值进行相同的减法操作,也没有扩展到其他内置操作.在这篇文章中,我试图调查两者之间的性能数据bsxfun并repmat覆盖所有bsxfun内置函数,从而为它提供更广泛的视角,因为这两者都提供了良好的矢量化解决方案.
具体来说,我对这篇文章的问题是:
各种内置操作如何bsxfun对repmat等效执行?bsxfun支持浮点运算一样@plus,@minus,@times等,并且还像关系和逻辑运算@ge,@and等等.所以,是否有特定的内置插件,会给我明显的加速与bsxfun比使用他们的repmat等价物?
罗兰在她blog post已经基准repmat对bsxfun具有定时@() A - repmat(mean(A),size(A,1),1)对@() bsxfun(@minus,A,mean(A))分别.如果我需要涵盖所有内置函数的基准测试,我可以使用一些其他可用于浮点,关系和逻辑运算的比较模型吗?
我想在这里研究两件事 -
有六种内置与使用关系操作bsxfun:@eq (equal),@ne (not-equal),@lt (less-than),@le (less-than or equal),@gt (greater-than)和@ge (greater-than or equal).很多时候我们在浮点数上使用它们并进行关系操作,它们输出逻辑数组.所以,让我很好奇,如果bsxfun在浮点数上使用这些关系运算时的固有扩展涉及输入元素的实际复制,这正是我的第一个问题.
我还想知道这个内存效率问题如何转换为何anonymous functions时使用bsxfun,再次与关系操作的情况一起使用.
这是受到的runtime/speedup测试的启发Comparing BSXFUN and REPMAT.
我想将列插入矩阵,但矩阵内的插入列位置因行而异.如何在不使用for循环的情况下执行此操作?
以下是MATLAB中的简化示例; 从A,X,P,我想在不使用for循环的情况下获得APX.
>> A = zeros(4,5) % inclusive matrix
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> X = [9,8;5,7;8,3;6,7] % data to insert
X =
9 8
5 7
8 3
6 7
>> P = [3;2;4;1] % insertion position within the matrix
P =
3
2
4
1
>> APX = [0,0,9,8,0;0,5,7,0,0;0,0,0,8,3;6,7,0,0,0] % what I want
APX =
0 0 9 8 …Run Code Online (Sandbox Code Playgroud)