【发布时间】:2012-08-15 18:23:18
【问题描述】:
来自http://www.cs.bell-labs.com/cm/cs/pearls/sol01.html:
C代码是这样的:
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); }
我找到了ctypes、BitArrays、numpy,但我不确定它们是否能像上面的 C 代码一样高效。
例如,如果我写这样的代码:
from ctypes import c_int
a=[c_int(9)]*1024*1024
使用的空间是 1M 字节还是更多?
有没有人知道一些可以在 Python 中做同样事情的好库?
【问题讨论】:
-
您认为当前实现效率低的用例是什么?
-
@BurhanKhalid 我为这个问题添加了更多描述,
a=[c_int(9)]*1024*1024会比1M Bytes使用更多吗? -
澄清一下:当您说“高效”时,您是什么意思?您想最小化挂墙时间、最小化 CPU 时间、最小化内存使用量还是其他方式?
-
@DanielPryden 主要针对内存使用情况,比如
a=[c_int(9)]*1024*1024会不会比1M Bytes使用更多? -
无论如何您都不需要使用多个整数,因为在 Python 中
int可以(实际上)是任意长度。
标签: python