Python 使用n^2位空间的二维布尔数组
我需要一个使用尽可能接近n^2位内存的2d n×n布尔数组。我需要的操作是能够快速设置和读取按(x,y)坐标索引的单个位。在python和/或numpy中是否有一种很好的方法可以做到这一点?如果您想要一个使用numpy的DIY解决方案,以下是一个起点:Python 使用n^2位空间的二维布尔数组,python,numpy,Python,Numpy,我需要一个使用尽可能接近n^2位内存的2d n×n布尔数组。我需要的操作是能够快速设置和读取按(x,y)坐标索引的单个位。在python和/或numpy中是否有一种很好的方法可以做到这一点?如果您想要一个使用numpy的DIY解决方案,以下是一个起点: a = np.zeros((n, (n-1)//8+1), dtype=np.uint8) # to set to zero a[x, y//8] &= 255 - (1 << (y%8)) # to set to one a
a = np.zeros((n, (n-1)//8+1), dtype=np.uint8)
# to set to zero
a[x, y//8] &= 255 - (1 << (y%8))
# to set to one
a[x, y//8] |= (1 << (y%8))
#to read
(a[x, y//8] >> (y % 8)) & 1
a=np.zero((n,(n-1)//8+1),dtype=np.uint8)
#置零
a[x,y//8]&=255-(1(y%8))&1
@DhruvPathak很好。要使其成为2d并能够轻松访问,最简单的方法是什么?@marshall您可以通过执行类似于a[x+y*w]
的操作,将任何一维数组用作2d数组(固定尺寸),其中x
和y
从零开始,2d数组具有恒定宽度w
(通过“恒定宽度”)我的意思是每一行都有相同的宽度),而1d数组a
的大小w*h
(其中h
是2d数组的高度)很抱歉,我不知道,但是为什么np.bool
一点也不清楚呢?