Я думаю, что вы ищете np.dstack
(или, в более общем смысле, np.concatenate
):
label255=label*255
label3=numpy.dstack((label255,label255,label255))
Это показывает, что dstack
создает тот же массив (label3
), что и ваша конструкция для label_3d
:
import numpy as np
label=np.random.random((100,100))
label255=label*255
label3=np.dstack((label255,label255,label255))
label_3d = np.empty([100,100,3])
label_3d[:,:,0] = label * 255 # value range of label is [0,1]
label_3d[:,:,1] = label * 255
label_3d[:,:,2] = label * 255
print(np.all(label3==label_3d))
# True
PS. Я не уверен, но вы пытались использовать label3.data
вместо ctypes.string_at(id(label3.tostring())+20, 100*100*3)
?