Numpy массив изображений устанавливает значения размера в пикселях на основе двоичных категорий - PullRequest
0 голосов
/ 23 октября 2018

Я работаю над проектом CNN, используя данные МРТ головного мозга.Ярлыки изображений находятся в большом набитом массиве формы (20636, 240, 240, 3).Третье измерение содержит значения пикселей в виде двоичных данных на основе критериев опухолевой ткани, где оно может быть одним из:

     [0,0,0]
     [0,0,1]
     [0,1,0]
     [1,0,0]

Мне нужно создать новый массив меток, где вместо этих категорий тканей,У меня просто есть массив, который определяет метку пикселей как опухоль / не опухоль, но сохраняет первоначальную форму.Я думал, что смогу сделать это, маскируя все пиксели == 1 и устанавливая data[:,:,:,0:1] = 1, а затем устанавливая все значения data[:,:,:,1:3] = 0.

. То, что я знаю о нарезке / индексации, мне не удаетсяэта проблема, поэтому я знаю, что я что-то упускаю, вероятно, довольно просто.То, что я пробовал, даже не приблизило меня.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете просто отсортировать по последней оси:

>>> import numpy as np
>>>     
# create example                                                                                                            
>>> a = np.identity(4, int)[np.random.randint(0, 4, (2, 2, 2)), :-1]                            
>>> a                                                                                                               
array([[[[1, 0, 0],                                                                                                 
         [0, 0, 1]],                                                                                                

        [[0, 0, 1],                                                                                                 
         [0, 0, 0]]],                                                                                               


       [[[0, 0, 1],                                                                                                 
         [1, 0, 0]],                                                                                                

        [[0, 0, 0],                                                                                                 
         [0, 0, 1]]]])                                                                                              
>>>                                                                                                                 
>>> b = a.copy()
# flip last axis to obtain descending order
>>> b[..., ::-1].sort(axis=-1)
>>> b                                                                                                               
array([[[[1, 0, 0],
         [1, 0, 0]],

        [[1, 0, 0],
         [0, 0, 0]]],


       [[[1, 0, 0],
         [1, 0, 0]],

        [[0, 0, 0],
         [1, 0, 0]]]])

Другие методы:

1) предварительно выделить

>>> b = np.zeros_like(a)
>>> b[..., 0] = a.any(axis=-1)

2) Продукт Kronecker

>>> np.kron(a.any(axis=-1, keepdims=True), (1,0,0))

3) внешнее произведение

>>> np.multiply.outer(a.any(axis=-1), (1,0,0))

4) необычное индексирование

>>> np.outer((0,1), (1,0,0))[a.any(axis=-1).view(np.uint8)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...