Используя numpy, скажем, у вас есть 3D-массив с именем img, заполненный значениями пикселей, и вы хотите построить массив, заполненный нулями всюду, но по заданному цветному каналу. Например, скажем, что img[0,0]=(42,84,126)
в выходном массиве, выделенном для красного канала, я хотел бы иметь output_red[0,0]=(42,0,0)
.Numpy: Ссылка на столбец массива в другом массиве без копий
Это может быть тривиальным сделано, как это, например:
output_red=np.zeros(img.shape,dtype=img.dtype)
output_red[...,0]=img[...,0]
Однако я все еще пытаюсь выяснить, если есть способ сделать это:
- , ничего не меняя в img (в противном случае я не смогу извлечь другие цветовые каналы)
- без копирования данных от img до outp ut в некоторый момент.
Это можно сделать тривиально в C с помощью указателей, но поскольку numpy.ndarrays должен быть непрерывным в памяти, IMHO не надеется сделать это с помощью нарезки массива. Маски массивов не работают, так как их метод fill() копирует данные, и я должен признать, что у меня нет другой идеи.
Знаете ли вы какой-то волшебный трюк в numpy, чтобы сделать это, или это безнадежно?
Благодаря
На самом деле ваша идея делает именно то, что я искал, спасибо! – user3274434
'arr' в 3 раза больше, чем' img'; откуда он получает свои данные? – hpaulj
@hpaulj содержит все значения NxMx3 исходного массива, объединенные нулями NxMx6 – shx2