天道酬勤,学无止境

bitarray

将 (0/1) 字符串加载到位数组中(Load a (0/1) string into a bit array)

问题 将“10101011101010”之类的字符串直接加载到新位数组中的最聪明方法是什么? (不是字节数组) (这些位应保持与列表中相同的顺序。) 回答1 你可以用 LINQ 做到这一点: var res = new BitArray(str.Select(c => c == '1').ToArray()); 回答2 您可以在这种情况下使用LINQ ,例如; var yourbitarray = new BitArray(yourstring.Select(s => s == '1').ToArray()); 回答3 这样的事情怎么样: string bits = "101010101010"; byte[] bytes = bits.ToCharArray().Select(c => (byte)c == '0' ? 0 : 1).ToArray(); 可能工作... 或者 byte[] bytes = bits.Select(c => (byte)c == '0' ? 0 : 1).ToArray();

2021-06-09 10:50:27    分类:技术分享    c#   string   bitarray

How do I implement a bit array in C / Objective C

iOS / Objective-C: I have a large array of boolean values. This is an inefficient way to store these values – at least eight bits are used for each element when only one is needed. How can I optimise?

2021-06-01 20:11:16    分类:问答    objective-c   c   ios   core-foundation   bitarray

Convert a byte or int to bitset

I have the following: int num=Integer.parseInt(lineArray[0]); byte numBit= num & 0xFF; Is there any very simple way to convert numBit to a bit array? Or even better, is there a way to bypass the byte conversion of the int and go straigh from num to a bit array? Thanks

2021-06-01 18:31:09    分类:问答    java   type-conversion   bitarray

慢按位运算(Slow bitwise operations)

问题 我正在研究一个Python库,该库对长位字符串执行很多按位运算,并且我想找到一种位字符串类型,以最大程度地提高其速度。 我已经尝试了内置的Python int类型,numpy,bitstring和bitarray,而且令人惊讶的是,在按位操作方面,Python int似乎可以胜任。 我搜索过的所有内容都说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) )

2021-06-01 16:04:51    分类:技术分享    python   numpy   bitwise-operators   bitarray   bitstring

Julia中的Array {Bool}和BitArray有什么区别,它们之间有何关系?(What's the difference between Array{Bool} and BitArray in Julia and how are they related?)

问题 我正在为布尔2d数组编写函数: function foo(A::Array{Bool,2}) ... end 评估和测试 A = randbool(3,3) foo(A) 退货 ERROR: 'foo' has no method matching foo(::BitArray{2}) 显然, randbool()生成一个BitArray ,而我假设randbool()会产生一个Array{Bool} 。 Array{Bool}和BitArray有何关系? 为什么它们都存在? 我可以编写foo()使其使用单个方法接受两种输入类型的方式(因为我看不出有区别)吗? 回答1 Array{Bool}将每个true/false值存储为Bool ,在内部将其表示为UInt8 。 因此,如果您的数组有N元素,则将需要N个字节来存储它。 一个BitArray将每个true/false值存储为一个位,(概念上)将其中的8个打包到单个UInt8 。 因此,仅需要N/8字节即可存储阵列。 BitArray还具有定义的方法,可以为您处理所有必需的位旋转操作。 根据操作, BitArray有时比相应的Array{Bool}慢,有时更快。 但是总的来说,性能差异很小,因此除非有特殊原因,否则使用BitArray是有意义的。 但总体而言,它们是可以互换的。 请注意,两者都是AbstractArray

2021-06-01 11:07:54    分类:技术分享    arrays   boolean   julia   bitarray

Fastest way to calculate primes in C#?

I actually have an answer to my question but it is not parallelized so I am interested in ways to improve the algorithm. Anyway it might be useful as-is for some people. int Until = 20000000; BitArray PrimeBits = new BitArray(Until, true); /* * Sieve of Eratosthenes * PrimeBits is a simple BitArray where all bit is an integer * and we mark composite numbers as false */ PrimeBits.Set(0, false); // You don't actually need this, just PrimeBits.Set(1, false); // remindig you that 2 is the smallest prime for (int P = 2; P < (int)Math.Sqrt(Until) + 1; P++) if (PrimeBits.Get(P)) // These are going to

2021-05-17 07:46:02    分类:问答    c#   .net   performance   algorithm   bitarray

用于在位数组中搜索连续的置位/清除位的快速代码?(Fast code for searching bit-array for contiguous set/clear bits?)

问题 是否有一些相当快速的代码可以帮助我快速搜索一个大的位图(几兆字节)以查找连续的零或一位? “合理地快速”是指可以利用机器字大小并立即比较整个字的东西,而不是进行逐字逐句的分析,而这种逐字分析的速度太慢了(例如对vector<bool> )。 例如,在卷的位图中搜索可用空间(进行碎片整理等)时,这非常有用。 回答1 Windows具有一种RTL_BITMAP数据结构,可以与其API一起使用。 但是我之前需要这段代码,所以我在这里写了(警告,这有点丑陋): https://gist.github.com/3206128 我仅对其进行了部分测试,因此它可能仍然存在错误(尤其是reverse错误)。 但是最新版本(仅与此版本略有不同)对我似乎可用,因此值得一试。 整个过程的基本操作是能够-快速地-查找位的长度: long long GetRunLength( const void *const pBitmap, unsigned long long nBitmapBits, long long startInclusive, long long endExclusive, const bool reverse, /*out*/ bool *pBit); 考虑到它的多功能性,其他所有内容都应该易于在此基础上构建。 我试图包含一些SSE代码,但是并没有明显改善性能。 但是,总的来说

2021-05-13 14:47:25    分类:技术分享    c++   c   bitarray   bitvector

Load a (0/1) string into a bit array

What is the smartest way to load a string like "10101011101010" directly into a new bit array? (not a byte array) (The bits should remain in the same order as in the list.)

2021-05-01 16:46:20    分类:问答    c#   string   bitarray

Unset the most significant bit in a word (int32) [C]

How can I unset the most significant setted bit of a word (e.g. 0x00556844 -> 0x00156844)? There is a __builtin_clz in gcc, but it just counts the zeroes, which is unneeded to me. Also, how should I replace __builtin_clz for msvc or intel c compiler? Current my code is int msb = 1<< ((sizeof(int)*8)-__builtin_clz(input)-1); int result = input & ~msb; UPDATE: Ok, if you says that this code is rather fast, I'll ask you, how should I add a portability to this code? This version is for GCC, but MSVC & ICC?

2021-04-30 03:32:05    分类:问答    c   micro-optimization   bitarray

python位数组(性能)(python bit array (performant))

问题 我正在设计布隆过滤器,并且想知道Python中性能最高的位数组实现是什么。 关于Python的好处是,它可以开箱即用地处理任意长度的整数,这就是我现在使用的方式,但是我对Python的内部知识还不够了解,是否知道这是在Python中执行性能最高的方法。 我找到了位数组,但是它处理了很多其他事情,例如切片,这是我不需要的。 我只需要&和| 和<<操作。 回答1 内置的int进行了很好的优化,并且已经支持& , | 和<< 。 至少有一种基于GMP的任意长度整数的替代实现,称为gmpy2。 (在同一库中还存在原始的gmpy , PyGMP , Sophie和其他一些包装器,但是我怀疑它们之间是否存在真正的性能差异。) “位数组”概念有两种主要的实现,即位数组(您所链接的一个)和位串,以及一些像intbitset这样的库,它们为您提供了类似于集合的接口(也应适合您的使用) 。 因此,让我们将它们扔在一起并进行比较: import random import struct import timeit import bitarray import bitstring import gmpy2 n = random.randrange((1<<31)+1, 1<<32) bs = bitstring.pack('<q', n) ba = bitarray.bitarray(64) ba

2021-04-29 18:19:53    分类:技术分享    python   performance   bitarray   bloom-filter