【问题标题】:How to select and threshold x% of values from a multi-dim NumPy array?如何从多维 NumPy 数组中选择和阈值 x% 的值?
【发布时间】:2021-07-08 06:05:24
【问题描述】:

我有一个形状为(32, 128, 128) 的多维 NumPy 数组。对于此数组中的每个条目(形状为(128, 128),我想检查其中存在的 80% 的值是否大于阈值,例如 0.5。

目前,我正在做这样的事情:

for entry in entries: # entries: (32, 128, 128)
    raveled = np.ravel(entry) # entry: (128, 128)
    total_sum = (raveled > 0.5).sum()
    proportion = total_sum/len(raveled)

    if proportion > 0.8:
        ...

我似乎无法找到一种有效的方法来做到这一点。任何帮助将不胜感激。

【问题讨论】:

  • 什么是“条目”?里面或外面是什么?
  • 一个条目是一个形状数组 (128, 128)。该数组由从具有 0 均值和单位方差的正态分布中提取的浮点数组成。
  • arr>0.5 创建一个具有相同形状的布尔数组。 np.sum 可用于计算 'True/1' 值的数量。 np.sum(和类似的ufunc 采用axis 元组来指定一个或多个维度的总和。
  • 谢谢。你能提供一个最小的例子吗?
  • 我也添加了刚刚尝试的内容。

标签: python numpy data-processing


【解决方案1】:
x =  np.random.rand(32, 128, 128)
#check 80%
np.sum(x > 0.5, axis = (1, 2)) > 0.8 * 128 * 128

x > 0.5 将为所有值 (32 * 128 * 128) 返回 True/False 布尔值。之后,我们在第 1 和第 2 轴上求和 (128 * 128) 以提取 True 值的总数,即所有 32 个数组都满足条件并检查数量是否大于 80%

【讨论】:

  • 谢谢。您能否通过添加 cmets 使示例更全面?可能对其他读者有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
相关资源
最近更新 更多