1

处理 4D numpy 数组(数组数组)。每个嵌套数组的形状(1, 100, 4)

trainset.shape
(159984, 1, 100, 4)

但随后在嵌套数组中,找到了一些nan我想要处理的值。例如,第一个嵌套数组trainset包含这样的:

trainset[0]
array([[[ 7.10669020e-02,  4.91383899e-03, -1.43700407e-02,
          1.52228864e-04],
        [ 7.59807410e-02, -9.45620170e-03,             nan,
          1.35892100e-04],
        [ 6.65245393e-02,             nan,             nan,
          8.98521456e-05],
        [            nan,             nan,             nan,
          1.41090006e-05],
        [            nan,             nan,             nan,
          6.68319391e-06],
        [            nan,             nan,             nan,
         -3.27272689e+01],
        [            nan,             nan,             nan,
         -1.09090911e+01],
        [            nan,             nan,             nan,
          8.25973981e+01],
        [            nan,             nan,             nan,
          1.12207785e+02],
        [            nan,             nan,             nan,
          1.65194797e+02],
        [            nan,             nan,             nan,
          2.25974015e+02],
        [            nan,             nan,             nan,
          2.78961026e+02],
        [ 3.87926649e-03,  1.81274134e-04, -1.08764481e-03,
          3.41298685e+02],
        ...
        [ 4.06054062e-03, -9.06370679e-04,  1.30517379e-03,
          3.10129855e+02]]])

如何检查所有数组trainsetnan值以及在哪里找到,用列的中值替换它?

编辑

使用:

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan, strategy='median')

for data in trainset:
  trainsfrom_data = imp_mean.fit(trainset)

ValueError: Found array with dim 3. Estimator expected <= 2.

给出指示的错误,如上。

4

1 回答 1

1

最简单的方法是使用SimpleImputer,并选择median插补策略。我不确定nan是按列替换还是按行替换,您可能必须在将数组通过 之前对其进行SimpleImputer()整形,然后再对其进行整形。

对您的编辑:将数组重塑为 2D,保留列大小,然后将其重塑为原始形式。此外,使用fit_transformfor 每一列即可一次获得结果。重塑将是这样的:

import numpy as np

A = np.random.rand(15, 1, 100, 4)
print(A.shape)

init_shape = A.shape

B = A.reshape(np.prod(init_shape[:-1]), init_shape[-1])
print(B.shape)

# SimpleImputer goes here

B = B.reshape(init_shape)
print(B.shape)
于 2020-07-20T12:42:35.503 回答