我有一个形状为numpy
的{{1}}数组,其中使用以下公式包含N个压缩的rgb值-
(N,)
我试图解压缩此数组,然后使用解压缩的值创建形状为rgb = (r<<16) + (g<<8) + b
的{{1}}数组。参见下面的代码片段-
numpy
如上所示,在(N,3)
循环内使用import numpy as np
def unpack_rgb(rgb):
b = rgb & 255
g = (rgb >> 8) & 255
r = (rgb >> 16) & 255
return r, g, b
N = 10
c = (np.ones((N, 3)) * 255).astype(np.uint8)
for i in range(N):
c[i, 0], c[i, 1], c[i, 2] = unpack_rgb(colors[i])
将颜色值分配给numpy数组unpack_rgb
。 我正在寻找解压缩并创建新的numpy数组的pythonic方法。
变量for
可以通过以下代码获得-
c
答案 0 :(得分:1)
您可以在整个numpy数组上运行按位运算符,然后使用np.dstack
来获取(r,g,b)元组,例如:
unpacked_colors = ((colors >> 16) & 255, (colors >> 8) & 255, colors & 255)
rgbs = np.dstack(unpacked_colors)
答案 1 :(得分:1)
好像c
没用吗?只需在默认的np.array
构造函数中使用元组
np.array([unpack_rgb(colors[_]) for _ in range(N)])
array([[203, 157, 217],
[169, 143, 86],
[192, 127, 8],
[114, 32, 141],
[153, 39, 1],
[ 14, 17, 57],
[200, 72, 146],
[133, 173, 139],
[ 35, 88, 40],
[ 22, 38, 144]], dtype=uint8)