【发布时间】:2021-08-23 04:53:54
【问题描述】:
我正在寻找一种有效的方法来对数百万个数组进行以下计算。对于每个数组中的值,我想计算 bin 中频率最高的值的平均值,如下所示。一些数组可能包含 nan 值,而其他值是浮点数。我的实际数据的循环需要很长时间才能完成。
import numpy as np
array = np.array([np.random.uniform(0, 10) for i in range(800,)])
# adding nan values
mask = np.random.choice([1, 0], array.shape, p=[.7, .3]).astype(bool)
array[mask] = np.nan
array = array.reshape(50, 16)
bin_values=np.linspace(0, 10, 21)
f = np.apply_along_axis(lambda a: np.histogram(a, bins=bin_values)[0], 1, array)
bin_start = np.apply_along_axis(lambda a: bin_values[np.argmax(a)], 1, f).reshape(array.shape[0], -1)
bin_end = bin_start + (abs(bin_values[1]-bin_values[0])
values = np.zeros(array.shape[0])
for i in range(array.shape[0]):
values[i] = np.nanmean(array[i][(array[i]>=bin_start[i])*(array[i]<bin_end[i])])
另外,当我运行上述代码时,我收到三个警告。第一个是我计算 value 变量的行的“RuntimeWarning:空切片的平均值”。我设置了一个条件,以防我有所有 nan 值来跳过这一行,但警告并没有消失。我想知道这是什么原因。另外两个警告是针对不满足 less 和 greater_equal 条件的情况,这对我来说是有意义的,因为它们可能是 nan 值。
【问题讨论】:
-
请提供minimal reproducible example,让我们重现您的问题。
-
我编辑了我的帖子并添加了一个新示例。
标签: python numpy histogram frequency bins