[英]How to make continuous random NaNs in python array
假設有一個隨機數的數組
[[ 1. 3. 4. 5. 1. 2. 5. 7.]
[ 1. 3. 6. 4. 4. 0. 4. 0.]
[ 5. 0. 5. 1. 3. 0. 5. 1.]
[ 2. 1. 5. 4. 6. 1. 3. 4.]
[ 2. 1. 0. 0. 6. 1. 2. 1.]
[ 3. 5. 7. 2. 9. 6. 3. 5.]]
我想在這個數組中引入4 個連續的NaN
,如下所示。 此外, NaN
必須占據整個數組的20% 左右,這意味着 20% 的缺失率。 該數組有 48 個分量,因此需要 10 個NaN
分量。 應該在這個數組中引入一個連續的NaN
塊。
如果可能,我想調整連續性比率和丟失率。 (連續比是指連續NaN的個數...)
[[ 1. 3. NaN NaN NaN NaN 5. 7.]
[ 1. 3. 6. 4. 4. 0. 4. 0.]
[ 5. 0. 5. 1. 3. 0. 5. 1.]
[ NaN NaN NaN NaN 6. 1. 3. 4.]
[ 2. 1. 0. 0. 6. 1. 2. 1.]
[ 3. 5. 7. 2. 9. 6. NaN NaN]]
有很多代碼在數組中生成隨機 NaN,但我不知道如何用連續的 NaN 替換值。 首先感謝您的幫助!
我可以建議這種方法,這遠非最佳,但它有效:
## data
import numpy as np
np.random.seed(42)
a = np.array([[1., 3., 4., 5., 1., 2., 5., 7.],
[1., 3., 6., 4., 4., 0., 4., 0.],
[5., 0., 5., 1., 3., 0., 5., 1.],
[2., 1., 5., 4., 6., 1., 3., 4.],
[2., 1., 0., 0., 6., 1., 2., 1.],
[3., 5., 7., 2., 9., 6., 3., 5.]])
## NaN statistics definition
nan_ratio = 0.2
nan_seq_len = 4
number_of_nan_seq = int(nan_ratio * a.size / nan_seq_len)
nan_position = np.random.randint(0, a.size-nan_seq_len, size=number_of_nan_seq)
## NaN insertion
nan_indexes = np.ones([nan_position.size, nan_seq_len]) * nan_position[:, np.newaxis] + np.arange(0, nan_seq_len)
a_shape = a.shape
a_flat = a.flatten()
a_flat[nan_indexes.astype('int')] = np.nan
a = a_flat.reshape(a_shape)
輸出a
:
array([[ 1., 3., 4., 5., 1., 2., 5., 7.],
[ 1., 3., 6., 4., 4., 0., 4., 0.],
[ 5., 0., 5., 1., 3., 0., 5., 1.],
[ 2., 1., 5., 4., nan, nan, nan, nan],
[ 2., 1., 0., 0., 6., 1., nan, nan],
[nan, nan, 7., 2., 9., 6., 3., 5.]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.