【问题标题】:Numpy image array set pixel dimension values based on binary categoriesNumpy图像数组根据二进制类别设置像素维度值
【发布时间】:2018-10-23 20:28:37
【问题描述】:

我正在使用大脑 MRI 数据进行 CNN 项目。图像标签位于形状为(20636, 240, 240, 3) 的大型numpy 数组中。第 3 维将像素值保存为基于肿瘤组织标准的二进制数据,其中它可以是以下之一:

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

我需要创建一个新的标签数组,而不是这些组织类别,我只是有一个数组,将标签像素指定为肿瘤/非肿瘤,但保持原始形状。我想我可以通过屏蔽任何像素 == 1 并设置data[:,:,:,0:1] = 1,然后设置data[:,:,:,1:3] = 0 的所有值来做到这一点。

到目前为止,我对切片/索引的了解让我无法解决这个问题,所以我知道我遗漏了一些可能非常直截了当的东西。我所尝试的甚至都没有让我接近。

【问题讨论】:

  • 让我知道我是否理解这一点,如果最后一个维度中有 1,您希望它位于第一个索引中,其余索引在该维度上为 0。对吗?
  • 是的,没错。

标签: python arrays numpy


【解决方案1】:

您可以简单地沿最后一个轴排序:

>>> 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) 克罗内克积

>>> 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)]

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 2020-02-21
    • 2020-03-09
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多