【问题标题】:count number of element in an imbalanced 4D numpy array计算不平衡的 4D numpy 数组中的元素数
【发布时间】:2020-07-09 09:40:02
【问题描述】:

我有一个 NumPy 数组 (1513,256,256,1),它实际上包含 1513 个大小为 (256,256) 的灰度图像。 每个图像包含 4 个类别(值为 0、1、2、3)。 0 表示背景。但是值不是整数,它们是浮点数 32。我想计算属于每个类的像素或元素的数量。数据不平衡,所以我试图平衡它。我尝试了一些方法,但没有奏效。一件事是数字不是整数,所以它们属于几个类,而不仅仅是 4 个类。 有谁知道如何获取每个类的元素数量?

我在这里使用了这段代码,但它不起作用。

y_integers = np.argmax(masks, axis=1)
class_weights = compute_class_weight('balanced', np.unique(y_integers), y_integers)
d_class_weights = dict(enumerate(class_weights))

【问题讨论】:

    标签: python numpy-ndarray


    【解决方案1】:

    您可以在区间[i-0.5, i+0.5] 中搜索值i,而不是测试相等性。这将管理浮动数据,您将能够使用numpy.histogram 轻松执行您的任务。这是一个小代码:

    import numpy as np
    
    n, h, w = 10, 255, 255
    arr = np.random.randint(0,4,(n,h,w,1)).astype('float')
    counts = np.zeros((n, 4), dtype='int')
    for i in range(n):
      counts[i] = np.histogram(arr[i].ravel(), bins=[-0.5, 0.5, 1.5, 2.5, 3.5])[0]
    
    print('counts:\n', counts)
    

    输出:

    % python3 script.py
    counts:
     [[16110 16041 16464 16410]
     [16258 16112 16397 16258]
     [16328 16270 16121 16306]
     [16142 16315 16330 16238]
     [16264 16269 16237 16255]
     [16159 16338 16224 16304]
     [16198 16285 16204 16338]
     [16298 16270 16381 16076]
     [16230 16281 16336 16178]
     [16385 16320 16198 16122]]
    

    请注意,每一行的总和应为256*256。你也可以根据你的数据修改bins=[-0.5, 0.5, 1.5, 2.5, 3.5]

    如果您想平衡这些值,您的问题称为直方图均衡化。 Here 是一个您可能能够适应以解决您的问题的问题。

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 1970-01-01
      • 2023-03-13
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2017-08-12
      • 2019-09-12
      相关资源
      最近更新 更多