Bitmap简介
bitmap是很常用的数据结构,比如用于Bloom Filter中、用于无重复整数的排序等等。bitmap通常基于数组来实现,数组中每个元素可以看成是一系列二进制数,所有元素组成更大的二进制集合。对于Python来说,整数类型默认是有符号类型,所以一个整数的可用位数为31位。
Bitmap的实现和使用
bitmap实现思路
bitmap是用于对每一位进行操作。举例来说,一个Python数组包含4个32位有符号整型,则总共可用位为4 * 31 = 124位。如果要在第90个二进制位上操作,则要先获取到操作数组的第几个元素,再获取相应的位索引,然后执行操作。
@author: JYFelt
@contact: JYFelt@163.com
@site: www.JYFelt.com
@version: 1.0
@license: Apache Licence
@file: bitmap_demo.py
@time: 2018/1/13 13:46
这一行开始写关于本文件的说明与解释
class Bitmap():
def __init__(self, max):
"""确定数组个数"""
self.size = int((max + 31 - 1) / 31)
self.array = [0 for i in range(self.size)]
def bitindex(self, num):
"""确定数组中元素的位索引"""
return num % 31
def set_1(self, num):
"""将元素所在的位——置1"""
elemindex = (num // 31)
byteindex = self.bitindex(num)
ele = self.array[elemindex]
self.array[elemindex] = ele | (1 << byteindex)
def test_1(self, i):
elemindex = (i // 31)
byteindex = self.bitindex(i)
if self.array[elemindex] & (1 << byteindex):
return True
return False
if __name__ == '__main__':
Max = ord('z')
shuffle_array = [x for x in 'qwelajkda']
ret = []
bitmap = Bitmap(Max)
for c in shuffle_array:
bitmap.set_1(ord(c))
for i in range(Max + 1):
if bitmap.test_1(i):
ret.append(chr(i))
print(u'原始数组是:%s' % shuffle_array)
print(u'排序以后的数组是:%s' % ret)
[Python]数据结构–Bitmap 位图 ‘Festinatione facit vastum’Bitmap简介Bitmap的实现和使用Bitmap简介bitmap是很常用的数据结构,比如用于Bloom Filter中、用于无重复整数的排序等等。bitmap通常基于数组来实现,数组中每个元素可以看成是一系列二进制数,所有元素组成更大的二进制集合。对于Pyth
最近重温了一下位图分割的相关内容,发现网络上位图分割原理讲得已经很清楚了,但是代码多为C++实现或者Matlab实现,因为需要Python的版本,于是出现了这篇博客。
想要了解位图分割的原理的同学,可以参考下面这篇博客。
https://www.cnblogs.com/qinguoyi/p/7601179.html
话不多说,直接来代码。
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('Fig3
学习过redis缓存穿透解决方案的可能知道布隆过滤器,关于布隆过滤器的知识这里不再多讲,它的底层使用的是bitmap实现的,bitmap就是一个二进制的bit位组成的数组,一个int类型为4个字节,则bit位为32位(1Byte=8bit),减去一个符号位,我们可用的位数为31位,也就可以用bit位对应的1来表示对应的十进制整数。
使用bitmap对整数数组排序时首先我们要分配这个bitmap的大小,获取数组中的最大整数 M,M//31+1 除以31向上取整,比如一个未排序数组最大数不超过60,那么得到结
@图像处理之读取bmp(1/4/8/16/24位)
图像处理之读取bmp(1/4/8/16/24位)
之前做图像处理作业,要求用read读取bmp,但是网上好像都没有找到能够读取各种位图的python程序。。。实属无奈
首先要获得1bit,4bit,8bit,16bit和24bit的图像。首先用Photoshop打开一张正常的jpg图片,接着在储存中选择bmp格式,分别选择24位和16位,但是1,4,8位无法选择,此时新建一张画布,在创建时选择8位,然后将上述图片导入画布,点击图像-模式-位图,并且按照上述
我想用bitmap的原因是因为我写了一个B站用户的爬虫,是通过关系网进行爬取的,所以我需要确定一个ID是否已经被爬取过。B站ID的规则是从1开始递增的数字,现在最大的ID接近4亿了。
Python2有一个bitmap的库,但是并不好用,感兴趣的可以用一下,安装方法和使用方法如下:
pip install bitmap
from bitmap import BitMap
bm = BitMa...
Python bitmap转Mat
我相信能发现这个问题的都是在玩pythonnet,并尝试把Bitmap转成OpenCV使用。
C#的话,OpenCV用的是Mat,Bitmap转成CV::Mat后,OpenCV可以直接使用。
Python的话,cv2虽说用的是UMat,但是可以用np.ndarray类型,因此可以通过byte[]来进行转换。
目前我用的最快做法是第一种,但我相信还有更快的做法:
import clr
from System import Byte
from System.IO import