【发布时间】:2020-10-14 19:55:32
【问题描述】:
我有一个包含整数值的大型 2D (N x N) numpy 数组。我想从中创建一个 3D 数组,即 (N x N x 3),其中 - 实际上 - 原始数组中的每个整数都被一个包含 RGB 三元组的三元素数组替换,基于特定的映射从整数到 RGB 三元组。
作为一个缩小的例子,考虑输入数组
ints = np.array([[0, 1, 0, 2, 2],
[1, 1, 0, 2, 0],
[0, 0, 3, 0, 4],
[5, 0, 3, 0, 4],
[0, 3, 3, 0, 0]])
以及从整数到由指定的 RGB 颜色的映射
mapping = {0: [0, 0, 0],
1: [255, 0, 0],
2: [0, 255, 0],
3: [0, 0, 255],
4: [127, 127, 0],
5: [127, 0, 127],
6: [0, 127, 127]}
我想要一种高效(最好是易于阅读)的方法,它可以采用 ints 和 mapping 并生成输出数组
colors = np.array([[[0,0,0], [255,0,0], [0,0,0], [0,255,0], [0,255,0],],
[[255,0,0], [255,0,0], [0,0,0], [0,255,0], [0,0,0],],
[[0,0,0], [0,0,0], [0,0,255], [0,0,0], [127,127,0],],
[[127,0,127], [0,0,0], [0,0,255], [0,0,0], [127,127,0],],
[[0,0,0], [0,0,255], [0,0,255], [0,0,0], [0,0,0],]])
我知道我可以将 colors 分配为适当维度的空 3D 数组,然后循环遍历 ints 的行和列,并相应地设置 colors 的相关切片......但这看起来很棒- 效率低下,我的真实数组将更像 1000 x 1000。有人对更快、更优雅、更惯用的方法有建议吗?
(仅供参考,我的动机是使用 plotly 的 imshow 方法来创建矩阵的可视化,就像热图一样,但是对于不同的数字具有最佳的不同颜色,而不是像标准着色选项假设的任何类型的连续体。 )
【问题讨论】:
标签: python numpy numpy-ndarray