Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用n^2位空间的二维布尔数组_Python_Numpy - Fatal编程技术网

Python 使用n^2位空间的二维布尔数组

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

我需要一个使用尽可能接近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[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
一点也不清楚呢?