python - 用 3D 替换 2D numpy 数组(元素到向量)
问题描述
这个问题之前可能已经被问过,所以我很高兴被指出答案,但我找不到它。
我有一个 2D numpy 数组True
和False
. 现在我需要将其转换为黑白图像(一个 3D numpy 数组),也就是说,我需要 [0,0,0] 代替 everyFalse
和 [1,1,1] 代替 every 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]) 的二维矩阵。
解决方案
最便宜的方法是将您的bool
数据查看为np.uint8
,并添加一个假维度:
img = np.lib.stride_tricks.as_strided(mask.view(np.uint8),
strides=mask.strides + (0,),
shape=mask.shape + (3,))
与 不同mask.astype(np.uint8)
,mask.view(np.uint8)
不复制数据,而是利用bool_
存储在单个字节中的事实。同样,由创建的新维度np.lib.stride_tricks.as_strided
是一个不复制任何数据的视图。
您可以绕过as_strided
并手动view
创建一个新的数组对象:
img = np.ndarray(shape=mask.shape + (3,), dtype=np.uint8,
strides=mask.strides + (0,), buffer=mask)
推荐阅读
- python - Python3:保存列向量
- php - 如何将表单输入设置为 Json 打印 php 文件中的变量?
- java - Jackson:尝试将 JSON 反序列化为 java 对象时未解析的前向引用
- c# - 如果源是从 WPF 中的另一个窗口设置的,为什么视频不会加载?
- powershell - Powershell Foreach 不跳过数组中的值
- r - MLR:如何在基准测试中提取特征选择
- r - 如何按条件删除行
- python - Django Rest Framework - 使用会话和令牌认证
- python - im trying to write dice game scores to a file but im getting type errors like this. TypeError: write() argument must be str, not tuple
- typescript - 运行单元测试时,“TS2322:类型 'Timeout' 不可分配给类型 'number'”