我有一些R脚本,我必须尽快在R中加载几个数据帧.这非常重要,因为读取数据是程序中最慢的部分.例如:从不同的数据帧绘图.我以sav(SPSS)格式获取数据,但我可以将其转换为建议的任何格式.不幸的是,合并数据帧不是一个选项.
什么是加载数据的最快方法?我在考虑以下几点:
read.spss.attr变量的任何自定义值(例如来自Spss导入文件的variable.labels)吗?或者这应该在一个单独的表中完成?欢迎任何其他想法.感谢您提前提出的每一个建议!
我根据你给出的答案在下面做了一个小实验,并且还添加了(24/01/2011)一个非常"hackish"但非常快速的解决方案,只从一个特殊的二进制文件中加载几个变量/列.后者似乎是我现在能想象的最快的方法,这就是为什么我编写了一个名为save的小包来处理这个功能(05/03/2011:ver.0.3).该套餐正在"重"开发,欢迎任何推荐!
在microbenchmark软件包的帮助下,我将很快发布一个具有准确基准测试结果的小插图.
你如何计时Go中的函数并以毫秒为单位返回其运行时间?
在研究某些高吞吐量数据结构的内存基准测试时,我意识到我只能使用ImmutableMap一点点重构.
认为这将是一个改进,我把它扔进了组合中并且惊讶地发现它不仅比它HashMap在单线程环境中慢,而且看起来一直比它慢ConcurrentHashMap!
你可以在这里看到完整的基准:https://bitbucket.org/snippets/dimo414/89K7G
测试的内容非常简单,需要花费多长时间才能获得地图中可能存在的大量随机字符串.
public static void timeAccess(Map<String,String> map) {
Random rnd = new Random(seed);
int foundCount = 0;
long start = System.nanoTime();
for(int i = 0; i < loop; i++) {
String s = map.get(RndString.build(rnd));
if(s != null)
foundCount++;
}
long stop = System.nanoTime() - start;
System.out.println("Found "+foundCount+" strings out of "+loop+" attempts - "+
String.format("%.2f",100.0*foundCount/loop)+" success rate.");
System.out.println(map.getClass().getSimpleName()+" took "+
String.format("%.4f", stop/1_000_000_000.0)+" seconds.");
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
对a HashMap,a ConcurrentHashMap …
有谁知道HiPerfTimer或StopWatch类是否更适合基准测试,为什么?
我创建了一个简单的类来对我的一些方法进行基准测试 但它准确吗?我对基准测试,计时等等都不熟悉,所以我想在这里可以请一些反馈.此外,如果它是好的,也许其他人也可以使用它:)
public static class Benchmark
{
public static IEnumerable<long> This(Action subject)
{
var watch = new Stopwatch();
while (true)
{
watch.Reset();
watch.Start();
subject();
watch.Stop();
yield return watch.ElapsedTicks;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
var avg = Benchmark.This(() => SomeMethod()).Take(500).Average();
Run Code Online (Sandbox Code Playgroud)
任何反馈?它看起来是非常稳定和准确的,还是我错过了什么?
如何获得自纪元以来的毫秒数?
请注意,我想要实际的毫秒,而不是秒乘以1000.我正在比较需要不到一秒钟且需要毫秒精度的东西的时间.(我看了很多答案,他们似乎都有*1000)
我将POST请求中的时间与服务器上的结束时间进行比较.我只需要两次使用相同的格式,不管是什么.我认为unix时间会起作用,因为Javascript有一个函数可以实现
在python文档中,我可以看到deque是一个特别的集合,高度优化从左侧或右侧弹出/添加项目.例如文件说:
Deques是堆栈和队列的概括(名称发音为"deck",是"双端队列"的缩写).Deques支持线程安全,内存有效的附加和从双端队列的弹出,在任一方向上具有大致相同的O(1)性能.
尽管列表对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并导致pop(0)和insert(0,v)操作的O(n)内存移动成本,这些操作改变了底层数据表示的大小和位置.
我决定使用ipython进行一些比较.谁能解释一下我在这里做错了什么:
In [31]: %timeit range(1, 10000).pop(0)
10000 loops, best of 3: 114 us per loop
In [32]: %timeit deque(xrange(1, 10000)).pop()
10000 loops, best of 3: 181 us per loop
In [33]: %timeit deque(range(1, 10000)).pop()
1000 loops, best of 3: 243 us per loop
Run Code Online (Sandbox Code Playgroud) 之前在比较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))分别.如果我需要涵盖所有内置函数的基准测试,我可以使用一些其他可用于浮点,关系和逻辑运算的比较模型吗?
我们正在对现有Java程序进行基准测试 它们是旨在从多核CPU中受益的线程应用程序.我们想测量内核数量对运行速度的影响,但我们不愿意(也无法)更改这些应用程序的代码.
当然,我们可以在不同的机器上测试软件,但这样既昂贵又复杂.我们宁愿拥有一个软件解决方案.
注意:您可以假设测试平台是Windows,Linux或Mac.理想情况下,我们希望能够在这两个平台上运行测试.
我一直在试图理解之间的权衡read和seek.对于小的"跳跃",读取不需要的数据比跳过它更快seek.
而定时不同的读/求块大小找到引爆点,我碰到一个奇特的现象:read(1)比慢约20倍read(2),read(3)等等.这种效应对于不同读取方法,例如,相同的read()和readinto().
为什么会这样?
搜索以下第2/3行的时间结果:
2 x buffered 1 byte readinto bytearray
Run Code Online (Sandbox Code Playgroud)
环境:
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:45:57) [MSC v.1900 32 bit (Intel)]
Run Code Online (Sandbox Code Playgroud)
时间结果:
Non-cachable binary data ingestion (file object blk_size = 8192):
- 2 x buffered 0 byte readinto bytearray:
robust mean: 6.01 µs +/- 377 ns
min: 3.59 µs
- Buffered 0 byte seek followed by 0 byte …Run Code Online (Sandbox Code Playgroud)