Как пропустить цикл for при работе с массивами numpy - PullRequest
0 голосов
/ 16 октября 2019

Вот мой код:

import numpy as np

>>> x
array([[   1,   57],
       [   2,   21],
       [   4,   34],
       ...,
       [3348,   29],
       [3350,   23],
       [3353,   11]])

>>> x.shape
(1310, 2)


>>> pic           # greyscale image

array([[223, 222, 225, ..., 217, 219, 214],
       [224, 222, 219, ..., 220, 219, 216],
       [223, 224, 220, ..., 219, 215, 213],
       ...,
       [228, 226, 231, ..., 224, 228, 229],
       [229, 227, 227, ..., 216, 225, 227],
       [226, 228, 225, ..., 218, 225, 230]], dtype=uint8)

pic = np.stack((pic,pic,pic), axis=2)

>>> pic.shape
(2208, 2752, 3)

>>>labels.shape
(2208, 2752)


color = [0, 0, 255]

for i in x:
    B=np.full((i[1],3), color).astype('int')
    pic[labels==i[0]]=B

Он окрашивает все пиксели в полутоновом изображении (pic) в синий цвет (rgb 0,0,255), которые удовлетворяют условию pic[labels==i[0]]. Теперь это очень медленно из-за цикла for, используемого (for i in x).

Существует ли какой-нибудь эффективный «Numpy way», который не будет включать цикл, и, следовательно, будет намного быстрее. Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...