如何解决用三元素子数组替换2D整数numpy数组中所有值的最有效方法?
我有一个包含整数值的大型2D(N x N)numpy数组。我想从中创建一个(N x N x 3)的3D数组,其中-实际上-根据特定的映射,将原始数组中的每个整数替换为包含RGB三元组的三元素数组从整数到RGB三元组。
作为一个按比例缩小的示例,请考虑输入数组
ints = np.array([[0,1,2,2],[1,0],[0,3,4],[5,0]])
以及由整数指定的RGB颜色的映射
mapping = {0: [0,1: [255,2: [0,255,3: [0,255],4: [127,127,5: [127,127],6: [0,127]}
我想要一种有效的(最好是易于阅读的)方法,该方法将采用ints
和mapping
并产生输出数组
colors = np.array([[[0,[255,],[[255,[[0,[127,[[127,]])
我知道我可以将colors
分配为适当尺寸的空3D数组,然后循环遍历ints
的行和列,并相应地设置colors
的相关切片。 ..但这似乎效率极低,我的实际数组将更像是1000 x1000。有人建议使用更快,更优雅,更惯用的方法吗?
(仅供参考,我的动机是使用plotly的imshow
方法来创建矩阵的可视化效果(例如热图),但是具有针对不同数字的最佳不同颜色,而不是像标准着色选项那样的任何连续体承担。)
解决方法
由于映射键可以是整数,因此映射可以与索引相同,并且RGB值只能是Nx3数组。
类似这样的东西:
x = np.arange(30).reshape((10,3)) # the map
keys = np.array([1,4,7,3])
x[keys] # the mapping
# which gives
array([[ 3,5],[12,13,14],[21,22,23],[ 9,10,11]])
,
使用[p>
arr = np.array(list(mapping.values()))
使用
为其编制索引arr[idx,:]
这取决于mapping
的订购和完成情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。