这个问题以前可能有人问过,所以我很高兴能找到答案,但我找不到。
我有一个2d numpy数组 True
以及 False
. 现在我需要将它转换成黑白图像(一个3d numpy数组),也就是说,我需要[0,0,0]来代替每个 False
[1,1,1]代替 True
. 最好的办法是什么?例如,
Input:
[[False, True],
[True, False]]
Output:
[[[0, 0, 0], [1, 1, 1]],
[[1, 1, 1], [0, 0, 0]]]
(您可能知道,3d图像是形状的数组 (height, width, 3)
其中3是深度尺寸,即通道数。)
加分如果有人能告诉我如何将它转换回来,也就是说,如果我有一个纯黑白图像(纯[0,0,0]和[0,0,1]像素),我如何得到一个同样高宽尺寸的二维矩阵 True
代替白色像素([1,1,1]),以及 False
代替黑色像素([0,0,0])。
2条答案
按热度按时间7y4bm7vi1#
最便宜的方法是查看您的
bool
数据为np.uint8
,并添加一个假维度:不像
mask.astype(np.uint8)
,mask.view(np.uint8)
不复制数据,而是利用以下事实bool_
存储在单个字节中。类似地,由np.lib.stride_tricks.as_strided
是不复制任何数据的视图。你可以绕过
as_strided
以及view
通过手动创建新的数组对象:x8goxv8g2#
我认为最清楚的方法是: