我有一个大的多维数组这里,它有很多 nan 值。
我想计算沿第一轴 (5124) 的平均值或插值。
import numpy as np
data = np.load('data.npy')
mean = np.nanmean(data, axis=1)
现在,
mean
的形状:5124, 112
和data
:5124, 112, 112
,所以我正在尝试:
data[np.any(np.isnan(data))][-1, :, :, -1] = mean
但是数据仍然充满了 nan 值。
我不知道如何将平均值填充到数据数组中。
我尝试了一些插值方法,但是非常慢并且消耗内存,所以我不知道是否有更好的方法来填充nan值。
有点慢,但你可以尝试:
data2 = np.nan_to_num(data) + np.isnan(data) * mean[:, None]
bottleneck
来加快过程:
# pip install bottleneck
import bottleneck as bn
mean = bn.nanmean(data, axis=1)
data2 = bn.replace(data, np.nan, 0) + np.isnan(data) * mean[:, None]
输出:
>>> data2
array([[[277.02652, 276.253 , 276.36276, ..., 272.2693 , 271.90436,
271.64706],
[277.02652, 276.253 , 276.36276, ..., 272.2693 , 271.90436,
271.64706],
[277.02652, 276.253 , 276.36276, ..., 272.2693 , 271.90436,
271.64706],
...,
[277.12585, 275.2982 , 275.56424, ..., 272.2693 , 271.90436,
271.64706],
[277.12585, 275.2982 , 275.56424, ..., 272.2693 , 271.90436,
271.64706],
[275.11438, 274.27878, 275.17032, ..., 272.2693 , 271.90436,
271.64706]],
[[277.4939 , 277.1011 , 277.1529 , ..., 271.71024, 271.51944,
271.41312],
[277.4939 , 277.1011 , 277.1529 , ..., 271.71024, 271.51944,
271.41312],
[277.4939 , 277.1011 , 277.1529 , ..., 271.71024, 271.51944,
271.41312],
...,
[277.50073, 276.22455, 276.3818 , ..., 271.71024, 271.51944,
271.41312],
[277.50073, 276.22455, 276.3818 , ..., 271.71024, 271.51944,
271.41312],
[275.67734, 275.02505, 275.5379 , ..., 271.71024, 271.51944,
271.41312]],
[[280.99646, 280.2319 , 280.23727, ..., 272.60663, 272.44424,
272.37073],
[280.99646, 280.2319 , 280.23727, ..., 272.60663, 272.44424,
272.37073],
[280.99646, 280.2319 , 280.23727, ..., 272.60663, 272.44424,
272.37073],
...,
[281.111 , 279.33786, 279.4811 , ..., 272.60663, 272.44424,
272.37073],
[281.111 , 279.33786, 279.4811 , ..., 272.60663, 272.44424,
272.37073],
[279.05643, 277.9778 , 278.5424 , ..., 272.60663, 272.44424,
272.37073]],
...,
[[299.3109 , 298.8816 , 299.19708, ..., 291.41086, 290.98898,
290.52472],
[299.3109 , 298.8816 , 299.19708, ..., 291.41086, 290.98898,
290.52472],
[299.3109 , 298.8816 , 299.19708, ..., 291.41086, 290.98898,
290.52472],
...,
[299.31546, 298.22787, 298.71487, ..., 291.41086, 290.98898,
290.52472],
[299.31546, 298.22787, 298.71487, ..., 291.41086, 290.98898,
290.52472],
[297.89618, 297.6253 , 298.5444 , ..., 291.41086, 290.98898,
290.52472]],
[[298.63446, 298.0783 , 298.38287, ..., 291.76425, 291.33102,
290.88724],
[298.63446, 298.0783 , 298.38287, ..., 291.76425, 291.33102,
290.88724],
[298.63446, 298.0783 , 298.38287, ..., 291.76425, 291.33102,
290.88724],
...,
[298.59354, 297.55087, 298.04398, ..., 291.76425, 291.33102,
290.88724],
[298.59354, 297.55087, 298.04398, ..., 291.76425, 291.33102,
290.88724],
[297.37015, 297.07132, 297.82864, ..., 291.76425, 291.33102,
290.88724]],
[[297.76532, 297.54745, 297.9761 , ..., 292.29636, 291.87845,
291.44046],
[297.76532, 297.54745, 297.9761 , ..., 292.29636, 291.87845,
291.44046],
[297.76532, 297.54745, 297.9761 , ..., 292.29636, 291.87845,
291.44046],
...,
[297.75772, 296.86356, 297.46335, ..., 292.29636, 291.87845,
291.44046],
[297.75772, 296.86356, 297.46335, ..., 292.29636, 291.87845,
291.44046],
[296.43677, 296.22397, 297.20667, ..., 292.29636, 291.87845,
291.44046]]], dtype=float32)