在 numpy ndarray 中处理 NaN / Inf
Handling NaN / Inf in a numpy dnarray
处理 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]]])
如何检查 trainset
中所有数组的 nan
值,并在找到的位置将其替换为列的中值?
编辑
使用:
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.
给出指示的错误,如上。
最简单的方法是使用 SimpleImputer 和 select median
插补策略。我不确定 nan
是按列还是按行替换,您可能必须在通过 SimpleImputer()
之前重塑数组,然后再重塑它。
对您的编辑:将数组重新整形为二维,保留列大小,然后重新整形为原始形式。此外,对每一列使用 fit_transform
以一次性获得结果。重塑将是这样的:
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)
处理 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]]])
如何检查 trainset
中所有数组的 nan
值,并在找到的位置将其替换为列的中值?
编辑
使用:
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.
给出指示的错误,如上。
最简单的方法是使用 SimpleImputer 和 select median
插补策略。我不确定 nan
是按列还是按行替换,您可能必须在通过 SimpleImputer()
之前重塑数组,然后再重塑它。
对您的编辑:将数组重新整形为二维,保留列大小,然后重新整形为原始形式。此外,对每一列使用 fit_transform
以一次性获得结果。重塑将是这样的:
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)