- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于 bsxfun
和 repmat
之间的性能比较,之前很少有人问过。
Matlab - bsxfun no longer faster than repmat?
。这篇文章试图研究repmat
和bsxfun
之间的性能比较,特定于沿着输入数组本身的列对输入数组的均值进行减法运算,因此,将仅探索@minus
的bsxfun
部分与repmat
等效项。 In 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
是否比repmat
更好,反之亦然的争论一直持续不断。在本文中,我们将尝试比较MATLAB附带的各种内置程序如何在运行时性能上与repmat
等效项进行抗衡,并希望从中得出一些有意义的结论。
了解BSXFUN内置
如果从MATLAB环境或通过Mathworks website提取了官方文档,则可以看到bsxfun
支持的内置函数的完整列表。该列表具有用于浮点,关系和逻辑运算的功能。
在MATLAB 2015A
上,支持的按元素的浮点运算是:
@max (maximum)
和
@min (minimum)
,因为可以通过多种方式实现它们的
repmat
等效项。
repmat
和
bsxfun
之间的性能,我们需要确保时序仅需要覆盖预期的操作。因此,像
bsxfun(@minus,A,mean(A))
这样的东西将不是理想的,因为它必须在
mean(A)
调用内计算
bsxfun
,但是计时可能并不重要。相反,我们可以使用另一个输入
B
,其大小与
mean(A)
相同。
A = rand(m,n)
和
B = rand(1,n)
,其中
m
和
n
是大小参数,我们可以改变它们并基于它们研究性能。下一节中列出的基准测试正是这样做的。
repmat
和
bsxfun
版本看起来像这样-
REPMAT: A + repmat(B,size(A,1),1)
BSXFUN: bsxfun(@plus,A,B)
repmat
和
bsxfun
进行浮点运算的第一组基准测试代码-
datasizes = [ 100 100; 100 1000; 100 10000; 100 100000;
1000 100; 1000 1000; 1000 10000;
10000 100; 10000 1000; 10000 10000;
100000 100; 100000 1000];
num_funcs = 11;
tsec_rep = NaN(size(datasizes,1),num_funcs);
tsec_bsx = NaN(size(datasizes,1),num_funcs);
for iter = 1:size(datasizes,1)
m = datasizes(iter,1);
n = datasizes(iter,2);
A = rand(m,n);
B = rand(1,n);
fcns_rep= {@() A + repmat(B,size(A,1),1),@() A - repmat(B,size(A,1),1),...
@() A .* repmat(B,size(A,1),1), @() A ./ repmat(B,size(A,1),1),...
@() A.\repmat(B,size(A,1),1), @() A .^ repmat(B,size(A,1),1),...
@() rem(A ,repmat(B,size(A,1),1)), @() mod(A,repmat(B,size(A,1),1)),...
@() atan2(A,repmat(B,size(A,1),1)),@() atan2d(A,repmat(B,size(A,1),1)),...
@() hypot( A , repmat(B,size(A,1),1) )};
fcns_bsx = {@() bsxfun(@plus,A,B), @() bsxfun(@minus,A,B), ...
@() bsxfun(@times,A,B),@() bsxfun(@rdivide,A,B),...
@() bsxfun(@ldivide,A,B), @() bsxfun(@power,A,B), ...
@() bsxfun(@rem,A,B), @() bsxfun(@mod,A,B), @() bsxfun(@atan2,A,B),...
@() bsxfun(@atan2d,A,B), @() bsxfun(@hypot,A,B)};
for k1 = 1:numel(fcns_bsx)
tsec_rep(iter,k1) = timeit(fcns_rep{k1});
tsec_bsx(iter,k1) = timeit(fcns_bsx{k1});
end
end
speedups = tsec_rep./tsec_bsx;
fcns_rep
和
fcns_bsx
-
fcns_rep = {
@() A == repmat(B,size(A,1),1), @() A ~= repmat(B,size(A,1),1),...
@() A < repmat(B,size(A,1),1), @() A <= repmat(B,size(A,1),1), ...
@() A > repmat(B,size(A,1),1), @() A >= repmat(B,size(A,1),1)};
fcns_bsx = {
@() bsxfun(@eq,A,B), @() bsxfun(@ne,A,B), @() bsxfun(@lt,A,B),...
@() bsxfun(@le,A,B), @() bsxfun(@gt,A,B), @() bsxfun(@ge,A,B)};
fcns_rep = {
@() A & repmat(B,size(A,1),1), @() A | repmat(B,size(A,1),1), ...
@() xor(A,repmat(B,size(A,1),1))};
fcns_bsx = {
@() bsxfun(@and,A,B), @() bsxfun(@or,A,B), @() bsxfun(@xor,A,B)};
A = rand(m,n)>0.5;
B = rand(1,n)>0.5;
MATLAB Version: 8.5.0.197613 (R2015a)
Operating System: Windows 7 Professional 64-bit
RAM: 16GB
CPU Model: Intel® Core i7-4790K @4.00GHz
bsxfun
相对
repmat
所获得的加速比被绘制为三组,如下图所示。
bsxfun
和atan2
,使用atan2d
的两个明显的提速案例非常明显。 30% - 50%
等效代码相比,使用repmat
进行提升的左右除法运算。 7
操作,它们的加速似乎非常接近于统一,因此需要仔细检查。加速图可以缩小到仅那些7
操作,如下所示-@hypot
和
@mod
一次性完成案例,否则
bsxfun
的性能仍然比
repmat
好10%。
7
支持的接下来的6个内置关系操作的第二组基准测试。
bsxfun
和
bsxfun
之间具有可比的运行时的起始情况,可以很容易地看到
repmat
在这些关系操作中胜出。在触摸
bsxfun
的情况下,对于这些情况,
10x
总是首选。
bsxfun
支持的其余3个内置逻辑操作的第三组基准测试。
bsxfun
的一次性可比运行时情况,
@xor
在这组逻辑操作中似乎也占了上风。
bsxfun
,而使用repmat
。在其余情况下,如果可以容忍bsxfun
的性能较差的一种情况仍然可以继续使用bsxfun
。 5 - 7%
一起使用时,看到了那种巨大的性能提升,人们可以考虑使用bsxfun
对,bsxfun
,进行数据处理,这样可以提高性能。我喜欢将这些解决方案案例称为使用 ragged patterns
的屏蔽功能的案例。这基本上意味着我们创建逻辑数组,即使用bsxfun
的掩码,可用于在单元格数组和数字数组之间交换数据。在数字数组中具有可用数据的优点之一是可以使用矢量化方法来处理它们。同样,由于bsxfun
是矢量化的一个很好的工具,您可能会发现自己再次使用它来解决相同的问题,因此有更多的理由来了解bsxfun
。为了读者的利益,这里很少有我能够探索此类方法的解决方案案例的链接:bsxfun
沿一维复制数据。现在,
repmat
可以沿多个维度复制,因此
repmat
的扩展等同于复制。因此,使用这两个功能对复制和扩展到多个维度执行类似的测试将很有趣。
关于performance - 比较BSXFUN和REPMAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719674/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
暂时忘记能力的定义,只关注能力的“检查”(使用“授权!”),我看到 CanCan 添加了大约 400 毫秒,用于简单地检查用户是否具有特定的能力主题/模型。 这是预期的吗(我假设不是)?或者,有没有可
我正在阅读有关 Swift 的教程 ( http://www.raywenderlich.com/74438/swift-tutorial-a-quick-start ),它预定义为不显式设置类型,因
这主要是由于对 SQL 问题的回答。由于性能原因,有意省略了 UDF 和子查询。我没有包括可靠性并不是说它应该被视为理所当然,但代码必须工作。 性能永远是第一位的吗?提供了许多以性能为主要优先事项的答
我已经编写了一个简单的测试平台来测量三种阶乘实现的性能:基于循环的,非尾递归的和尾递归的。 Surprisingly to me the worst performant was the loop o
我已将 ui-performance 插件应用到我的应用程序中。不幸的是,在开发模式下运行应用程序时它似乎不起作用。例如,我的 javascript 导入是用“vnull”版本呈现的。 例如 不会
我有一个我操作的 F# 引用(我在各处添加对象池以回收经常创建和删除的短期对象)。我想运行结果报价;现在我使用了 F# PowerPack,它提供了将引用转换为表达式树和委托(delegate)的方法
我正在尝试在 Spark 服务器上运行 SparklyR 库中的机器学习算法。 1 个簇 8 核 24G内存 Ubuntu 16.04 星火2.2 独立配置 1名师傅/2名 worker 每个执行器的
我有一个数据库(准确地说是在 postgres 上运行),具有以下结构: user1 (schema) | - cars (table) - airplanes (table, again) .
我的应用程序在我的 iPad 上运行。但它的表现非常糟糕——我的速度低于 15fps。谁能帮我优化一下? 它基本上是一个轮子(派生自 UIView),包含 12 个按钮(派生自 UIControl)。
在完成“Scala 中的函数式编程原则”@coursera 类(class)第 3 周的作业时,我发现当我实现视频类(class)中所示的函数联合时: override def union(tha
我正在重构我的一个 Controller 以使其成为一项服务,我想知道不将整个服务容器注入(inject)我的 Controller 是否会对性能产生影响。 这样效率更高吗: innova.path.
我有一个要显示的内容很大的文件。例如在显示用户配置文件时, 中的每个 EL 表达式需要一个 userId 作为 bean 的参数,该参数取自 session 上下文。我在 xhtml 文件中将这个 u
我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)是 mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: What's the (hidden) cost of lazy val? (Scala) Scala 允许定义惰
一些文章建议现在 build() 包含在 perform() 本身中,而其他人则建议当要链接多个操作时使用 build().perform()一起。 最佳答案 build() 包含在 perform(
Postgres docs说 For best optimization results, you should label your functions with the strictest vol
阅读Zero-cost abstractions看着 Introduction to rust: a low-level language with high-level abstractions我尝
我想在 MQ 服务器上部署 SSL,但我想知道我当前的 CPU 容量是否支持 SSL。 (我没有预算增加 CPU 内核和 MQ PVU 的数量) 我的规范: Windows 2003 服务器 SP2,
因此,我在 Chrome 开发者工具 的性能 选项卡内的时间 部分成功地监控了我的 React Native 应用程序的性能。 突然在应用程序的特定重新加载时,Timings 标签丢失。 我已尝试重置
我是一名优秀的程序员,十分优秀!