gpt4 book ai didi

python - 在 numpy 数组中有效地找到二进制字符串中的位位置

转载 作者:行者123 更新时间:2023-11-28 22:55:20 24 4
gpt4 key购买 nike

我有一个大型 Pandas 数据框(大多数情况下是 Numpy ndarray 的子类),其中包含二进制字符串(0 和 1)。我需要找到这些字符串中所有零的位置,然后标记它们。此外,我希望零的位置相对稀疏(约占所有位位置的 1%)。

基本上,我想运行这样的东西:

import pandas as pd
x = pd.Series([ '11101110', '11111101' ], ) # start with strings
x = pd.Series([ 0b11101110, 0b11111101 ], ) # ... or integers of a known bit length

zero_positions = find_zero_positions( x )

屈服 zero_positions =...

         value
row bit
0 4 0
0 0
1 1 0

我已经尝试了几种不同的方法来做到这一点,但没有想出比一次循环遍历一行更好的方法。 (编辑:我要查看的实际字符串比此处的 8 位示例长得多,因此查找表不起作用。)

我不确定将其作为字符串问题(Pandas 的 Vectorized string methods 不提供子字符串位置查找方法)或数字问题(使用类似 numpy.unpackbits 的方法,也许吧?)。

最佳答案

你可以使用 numpy.unpackbits如下,以这种形式的 ndarray 开始:

In [1]: x = np.array([[0b11101110], [0b11111101]], dtype=np.uint8)

In [2]: x
Out[2]:
array([[238],
[253]], dtype=uint8)

In [3]: df = pd.DataFrame(np.unpackbits(x, axis=1))

In [4]: df.columns = df.columns[::-1]

In [5]: df
Out[5]:
7 6 5 4 3 2 1 0
0 1 1 1 0 1 1 1 0
1 1 1 1 1 1 1 0 1

然后从 DataFrame 中,只是 stack并找到零点:

In [6]: s = df.stack()

In [7]: s.index.names = ['row', 'bit']

In [8]: s[s == 0]
Out[8]:
row bit
0 4 0
0 0
1 1 0
dtype: uint8

我认为这是一种相当有效的方法。

关于python - 在 numpy 数组中有效地找到二进制字符串中的位位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com