如何转换加载有 ImageIO 的 Numpy 数组的第三维
How to transform 3rd dimension of Numpy array loaded with ImageIO
我使用 ImageIO
.
从 PNG 加载了一个形状为 (128,128,3)
的 numpy 数组
维度 3 似乎代表 RGB 值。在这种情况下,维度 3 的所有值都是 [255,255,255]
或 [0,0,0]
(即白色或黑色)。
我想去掉第三维并将其替换为单个一维数组,其中包含 0 表示黑色,1 表示白色。所以最终结果的形状应该是 (128,128,1)
.
我曾尝试使用 numpy.reshape
和 numpy.transpose
的组合,但我真的很难理解如何做到这一点。我是 numpy 和 Python 的初学者,所以我可能遗漏了一些非常简单的东西。
不缺,而且很简单。只需索引您想要的频道:
im[:, :, 0]
要转换为 0 和 1,您可以创建一个布尔数组:
im[:, :, 0].astype(np.bool)
或将 255 设为一:
im = im[:, :, 0]
im[im > 0] = 1
创建布尔数组的更高级方法是将基础数据视为布尔值。如果输入是 uint8
:
,这只会开箱即用
im[:, :, 0].view(dtype=np.bool)
最后,要对N维数组的最后一维进行索引,可以使用省略号:
im[..., 0]
...
(或实际名称Ellipsis
)在索引中表示"use :
for all dimensions not listed explicitly."您最多可以在索引中使用一次。
一般来说,您需要阅读 indexing and later on broadcasting 上的文档。那里有更温和的介绍,但是 numpy 文档非常全面并且直接来自马口。
我使用 ImageIO
.
(128,128,3)
的 numpy 数组
维度 3 似乎代表 RGB 值。在这种情况下,维度 3 的所有值都是 [255,255,255]
或 [0,0,0]
(即白色或黑色)。
我想去掉第三维并将其替换为单个一维数组,其中包含 0 表示黑色,1 表示白色。所以最终结果的形状应该是 (128,128,1)
.
我曾尝试使用 numpy.reshape
和 numpy.transpose
的组合,但我真的很难理解如何做到这一点。我是 numpy 和 Python 的初学者,所以我可能遗漏了一些非常简单的东西。
不缺,而且很简单。只需索引您想要的频道:
im[:, :, 0]
要转换为 0 和 1,您可以创建一个布尔数组:
im[:, :, 0].astype(np.bool)
或将 255 设为一:
im = im[:, :, 0]
im[im > 0] = 1
创建布尔数组的更高级方法是将基础数据视为布尔值。如果输入是 uint8
:
im[:, :, 0].view(dtype=np.bool)
最后,要对N维数组的最后一维进行索引,可以使用省略号:
im[..., 0]
...
(或实际名称Ellipsis
)在索引中表示"use :
for all dimensions not listed explicitly."您最多可以在索引中使用一次。
一般来说,您需要阅读 indexing and later on broadcasting 上的文档。那里有更温和的介绍,但是 numpy 文档非常全面并且直接来自马口。