我有
var previous = new BitArray(new bool[]{true});
var current = new BitArray(new bool[]{false});
Run Code Online (Sandbox Code Playgroud)
我想连接它们.我已经尝试过了:
var next = new BitArray(previous.Count + current.Count);
var index = 0;
for(;index < previous.Count; index++)
next[index] = previous[index];
var j = 0;
for(;index < next.Count; index++, j++)
next[index] = current[j];
previous = current;
Run Code Online (Sandbox Code Playgroud)
但它看起来不是最好的方法.
我一直想知道在C#中反转BitArray顺序的最有效方法是什么.要清楚,我不想通过调用.Not()来反转Bitarray,我想要反转数组中位的顺序.
干杯,克里斯
我不确定我正在尝试做什么的确切术语.我有一个存储8x8块,每个字节存储一行.当我完成后,我希望每个字节存储一列.bits8 bytes
例如,当我完成时:
Byte0out = Byte0inBit0 + Byte1inBit0 + Byte2inBit0 + Byte3inBit0 + ...
Byte1out = Byte0inBit1 + Byte1inBit1 + Byte2inBit1 + Byte3inBit1 + ...
Run Code Online (Sandbox Code Playgroud)
在C中表现良好的最简单方法是什么?
我正在开发一个Python库,它对长位字符串执行许多按位操作,我想找到一个能够最大化其速度的位串类型.我已经尝试了内置的Python int类型,numpy,bitstring和bitarray,而且令人惊讶的是,当涉及到按位操作时,Python int似乎赢了.我用google搜索的所有内容都说numpy对于像这样的矢量化操作要快得多.我是不是以某种方式使用了numpy错误?我可以使用另一个Python库,它实际上改进了Python的内置int类型吗?
from timeit import timeit
import random
size = 10000
def int_to_bits(i):
result = []
for _ in range(size):
result.append(i % 2)
i >>= 1
return result
x = random.randrange(2**size)
y = random.randrange(2**size)
print(x.bit_length(), y.bit_length())
x_bits = int_to_bits(x)
y_bits = int_to_bits(y)
t = timeit(
stmt='a & b',
setup='a = %d; b = %d' % (x, y)
)
print("raw ints:", t)
t = timeit(
stmt='a & b',
setup=('import numpy;'
'a = numpy.array(%r, dtype=int);' …Run Code Online (Sandbox Code Playgroud) 在我正在进行的一项任务中,我们需要使用位向量,但我不确定如何在Python中执行此操作.它们应该能够从4位到20位.我以前从未使用过位向量,但我想可以创建一个使用通常的AND/OR/XOR操作操作的无符号字节数组.
这里的重要限制是:除了标准Python提供的库之外,我不能依赖任何库.
我想我知道如何使用8位无符号字节的数组在C中执行此操作:例如,将零数组的第18位转换为1,我会做类似my_bit_array [3]&= 1 << 2的操作
但由于Python是动态类型的,并且没有内置数组类型,我将如何以pythonic方式执行此操作?
是否有可能(如何?)表达大小为20的位向量?我在考虑制作一个24位/ 3字节向量并忽略4位.
我正在学习C/C++编程并遇到过"位数组"或"位向量"的用法.我无法理解他们的目的?这是我的疑惑 -
int数组吗?(当然更多的记忆,但..)我正在寻找应用程序,以便我能更好地理解.对于Eg -
问:您将获得一个包含范围内的整数(1到1百万)的文件.有一些重复,因此缺少一些数字.找到找到丢失数字的最快方法?
对于上面的问题,我已经阅读了告诉我使用位数组的解决方案.如何将每个整数存储一下?
鉴于文件如下所示:
1440927 1
1727557 3
1440927 2
9917156 4
Run Code Online (Sandbox Code Playgroud)
第一个字段是ID in range(0, 200000000).第二个字段代表一种类型,即in range(1, 5).类型1和类型2属于公共类别S1,而类型3和类型4属于公共类别S2.一个ID可能有几个不同类型的记录.该文件大小约为200MB.
问题是计算具有类型1或2的记录的ID的数量,以及具有类型3或4的记录的ID的数量.
我的代码:
def gen(path):
line_count = 0
for line in open(path):
tmp = line.split()
id = int(tmp[0])
yield id, int(tmp[1])
max_id = 200000000
S1 = bitarray.bitarray(max_id)
S2 = bitarray.bitarray(max_id)
for id, type in gen(path):
if type != 3 and type != 4:
S1[id] = True
else:
S2[id] = True
print S1.count(), S2.count()
Run Code Online (Sandbox Code Playgroud)
虽然它给出了答案,但我认为它运行得有点慢.我该怎么做才能让它跑得更快?
编辑:
文件中有重复的记录.我只需要区分S1(类型1和类型2)和S2(类型3和类型4).例如,1440927 1并且 …
是否有一些相当快的代码可以帮助我快速搜索大的位图(几兆字节)运行连续的零或一位?
通过"合理快速",我的意思是可以利用机器字大小并同时比较整个单词,而不是进行逐点分析,这是非常慢的(例如一个人vector<bool>).
它对于例如在卷的位图中搜索可用空间(用于碎片整理等)非常有用.
我有一个int数组(长度总是64),如:
1110000100000110111001000001110010011000110011111100001011100100
我想把它写在一个Int64(或ulong?)变量中.怎么做?
我尝试创建一个BitArray然后获取int,但它抛出System.ArgumentException,在CopyTo行:
private static Int64 GetIntFromBitArray(BitArray bitArray) {
var array = new Int64[1];
bitArray.CopyTo(array, 0);
return array[0];
}
Run Code Online (Sandbox Code Playgroud) 在 Windows 10 中运行命令后 -python -m pip install web3出现以下错误 - “无法构建 bitarray cytoolz lru-dict”。
我通过安装 Visual Studio Build Tools 2019 并运行命令解决了该问题 -python -m pip install python-dev-tools
为什么这个过程中需要 python-dev-tools ?