小编san*_*san的帖子

一次读取多个Python pickle数据,缓冲和换行?

给你上下文:

我有一个大文件f,几个Gigs的大小.它包含通过运行生成的不同对象的连续pickle

for obj in objs: cPickle.dump(obj, f)

我想在阅读此文件时利用缓冲.我想要的是一次将几个拾取的对象读入缓冲区.这样做的最佳方式是什么?我想要一个readlines(buffsize)腌制数据的模拟.事实上,如果挑选的数据确实是换行符,则可以使用readlines,但我不确定这是否属实.

我想到的另一个选择是首先dumps()将pickled对象转换为字符串,然后将字符串写入文件,每个文件用换行符分隔.要读回文件,我可以使用readlines()loads().但是我担心一个腌制的物体可能有这个"\n"角色,它会抛弃这个文件读取方案.我的恐惧没有根据吗?

一种选择是将其作为一个巨大的对象列表来剔除,但这将需要比我能承受的更多的内存.可以通过多线程加速设置,但我不想在缓冲工作正常之前去那里.什么是这种情况下的"最佳实践".

编辑:我还可以将原始字节读入缓冲区并调用其上的负载,但我需要知道负载消耗了多少字节的缓冲区,以便我可以抛弃它.

python newline buffering pickle

9
推荐指数
2
解决办法
6341
查看次数

Lispy方言具有良好的多维阵列编程支持

是否有任何Lisp或方案方言对阵列和线性代数操作有很好的支持.通过良好的支持,我不是指BLAS/LAPACk的接口,而是语言本身的高效数组原语.比如说,如果它可以对抗Numpy,我认为它是有效率的.我听说Stalin非常快,但我对lisp很新,不熟悉语法上方便的操作和这种语言中多d数组的高效表示.如果有个人经验支持,指针(没有双关语意)将深受赞赏.

lisp arrays scheme numpy common-lisp

8
推荐指数
1
解决办法
1395
查看次数

如何告诉C或C++编译器指针没有别名

我有一个接收指针数组的函数,如下所示:

void foo(int *ptrs[], int num, int size)
{ 
  /* The body is an example only  */
     for (int i = 0; i < size; ++i) { 
       for (int j = 0; j < num-1; ++j)
         ptrs[num-1][i] += ptrs[j][i];
     }
}
Run Code Online (Sandbox Code Playgroud)

我想传达给编译器的是指针ptrs[i]不是彼此的别名,并且数组ptrs[i]不重叠.我该怎么办?我别有用心的是鼓励自动矢量化.

另外,有没有办法获得与__restrict__a的迭代器相同的效果std::vector

c c++ pointers pointer-aliasing restrict-qualifier

8
推荐指数
3
解决办法
954
查看次数

CRTP 容器

我正在尝试一些模板编程,对此我很陌生。我想要实现的是一些包含 STL 容器的 CRTP 类。让class A{};我们以(编译时)基类为例,class B{};class C{};是在编译时按照 CRTP 样式“派生”的。

现在 和BC将包含容器。为了示例的目的,将其分别设为 astd::vector和 a std::set。现在,我想通过 abegin()和一个end()公开前向迭代器的函数来公开这些迭代器。但是,我不想公开内部的确切容器是什么B,并且C我想为 定义这些函数A,以便在调用时使用正确的B容器C

这可能吗 ?现在我的计划是有一个Iterator内部类BC它将包含实际的迭代器(视情况而定的向量或集合)并将调用委托给它。然而,这似乎是很多重复的粘合代码,我怀疑有更好的选择。

我有一些问题:

  1. 我如何声明 、 中的内部类AB以便C它与 CRTP 配合良好。我需要为A,B和复制它吗C?它可以是一个空类吗A?我可以用专门的实现来掩盖它们BC

  2. 如何以更少的胶水和更少的重复来公开迭代器?

我不想与 boost 这样的外部库创建依赖关系,并且只想坚持使用 …

c++ templates crtp

5
推荐指数
1
解决办法
1713
查看次数

在内存压力下匿名mmap优于malloc的优点

我正在运行一些大型数组处理代码(在运行Linux的Pentium上).数组的大小足以使进程交换.到目前为止它正在工作,可能是因为我试图保持我的读写连续.但是,我很快就需要处理更大的数组.在这种情况下,切换到匿名mmapped块有帮助吗?

如果是这样,请解释原因.

在我的浅薄理解中,mmap实现了一个从tmpfs分区挂载的内存映射文件,该内存压力会回落到交换机制.我想要理解的是mmap如何比标准malloc做得更好(为了我或假设它确实更好,我不知道是不是这样).

注意:请不要建议获得64位或更多的RAM.遗憾的是,这不是一种选择.

c c++ memory memory-management

5
推荐指数
1
解决办法
5627
查看次数

快速,低内存,恒定键值数据库,支持并发和随机访问读取

我需要磁盘上的键值存储,不要太大或分布不大。用例如下:

  • 完整的数据库将只有几个Gbs
  • 键和值都具有恒定大小
  • 它是一个恒定的数据库。整个数据库写完后,我不需要再写任何条目(或很少写)
  • 密钥将以不可预测的顺序访问
  • 必须支持多个进程的并发读取
  • 必须非常快,因为读者将紧密访问数百万个密钥。因此,它应该尽可能像循环遍历关联数组(STL's std::map例如)
  • 理想情况下,它应允许设置要使用的RAM数量,通常应使用数百Mb
  • 用C或C ++编写。现有的python扩展将是一个很大的优势,但我可以自己添加

因此cdbgdbm看起来不错的选择,但只是想知道是否有更合适的选择。指向相关基准甚至相关轶事证据的指针将不胜感激。

key-value multiprocessing multiprocess key-value-store

5
推荐指数
1
解决办法
2196
查看次数

从向量中获取通用双向迭代器

在编写一个带有泛型双向迭代器的函数之前,我想测试一下int的向量是如何工作的.

vector<int> a(10,1);
iterator<bidirectional_iterator_tag, int> i = a.begin();
for (; i != a.end(); ++i) cout << *i;
Run Code Online (Sandbox Code Playgroud)

这段代码不能编译.g ++抱怨你不能将begin()的返回类型转换iterator<bidirectional_iterator_tag, int>为操作符++并且*没有在其上定义.显然我做错了什么,会很感激帮助.

c++ iterator stl

5
推荐指数
1
解决办法
2395
查看次数

模板参数推导和 cons 限定

谁能解释一下为什么代码不能编译。

template<class T, class DER>
struct Base {
  T a;
  Base(const T argB) : a(argB){}
};

template<class T>
struct Derived : Base<T, Derived<T> > {
  Derived(const T argD) : Base<T, Derived<T> >(argD){}
};

int main() {
  int val = 10;
  const int *p = &val;
  /* this was in the original question
  Derived<int*> d(p); // breaks, but compiles with Derived<const int*> d(p);
  */
  Derived d(p); // fails, but Derived<const int*> d(p); compiles
}
Run Code Online (Sandbox Code Playgroud)

错误消息是关于没有从int*到 的转换const int*。正如我所看到的,它 …

c++ templates

5
推荐指数
2
解决办法
1266
查看次数

为什么contextlib的惊人开销[50X]和Python中的With语句以及如何处理它

在寻找性能错误的过程中,我终于发现问题的根源是contextlib包装器.开销非常惊人,我没想到会成为经济放缓的源头.减速在50倍的范围内,我不能在循环中拥有它.我肯定会感谢文档中的警告,如果它有可能显着降低速度.

自2010年以来,这似乎已为人所知https://gist.github.com/bdarnell/736778

它有一套你可以尝试的基准测试.请更改fnfn()simple_catch()运行前.谢谢,DSM指出了这一点.

我很惊讶自那时以来情况没有改善.我能做些什么呢?我可以下载尝试/除外,但我希望还有其他方法来处理它.

python with-statement

5
推荐指数
1
解决办法
120
查看次数

如何使用逻辑回归和 scikit 学习进行回归而不是分类

我需要预测的目标变量是probabilities(而不是标签)。我的训练数据中对应的列也是这种形式。我不想通过对目标设置阈值来创建分类问题而丢失信息。

如果我logistic regression classifier用二进制标签训练,sk-learn 逻辑回归 API 允许在预测时获得概率。但是,我需要用概率来训练它。有没有办法在 scikits-learn 或一个合适的 Python 包中做到这一点,它可以扩展到 1K 维的 100K 数据点。

python scikit-learn logistic-regression

5
推荐指数
1
解决办法
1519
查看次数