如何在Python中用NumPy在矩阵中随机插入NaN
在这篇文章中,让我们看看如何使用Numpy生成一个随机插入Nan到矩阵的Python脚本。下面给出了3种方法来做同样的事情。
方法1:使用ravel()函数
ravel ()函数返回连续的扁平化数组(具有所有输入数组元素的一维数组,并且与之类型相同)。只有在需要的时候才会进行复制。
语法 :
numpy.ravel(array, order = 'C')
步骤:
- Import module
- Create data
- 选择随机的指数来南值。
- 将这些指数传递给ravel()函数
- Print data
示例 1:
import numpy as np
import pandas as pd
# number of nan we want to add It will insert 3 nan values to the data.....
n = 3
# creating dataset
data = np.random.randn(5, 5)
# choosing random indexes to put NaN
index_nan = np.random.choice(data.size, n, replace=False)
# adding nan to the data.
data.ravel()[index_nan] = np.nan
print(data)
输出:
示例2:将nan添加到但使用randint函数来创建数据。为了在randint函数中使用np.nan,我们必须首先将数据转换成浮点数,因为np.nan是浮点数类型的。
import numpy as np
# number of nan we want to add It will insert 3 nan values to the data.....
n_b = 5
# creating dataset
data_b = np.random.randint(10, 100, size=(5, 5))
# converting the data to float as nan is also of type float
data_b = data_b*0.1
# choosing random indexes to put NaN
index_b = np.random.choice(data_b.size, n_b, replace=False)
# adding nan to the data.
data_b.ravel()[index_b] = np.nan
print(data_b)
输出:
方法2:创建mask
创建一个布尔掩码,并将该掩码应用于数据集,可以是产生所需结果的一种方法。
步骤:
- Import module
- Create data
- Create mask
- 洗涤掩码以随机应用Nan值
- 将掩码应用于数据
- Print data
示例 :
import numpy as np
# creating dataset
X = 10
Y = 5
N = 15
data = np.random.randn(X, Y)
# making a array randomly of same size as data of bool type
mask = np.zeros(X*Y, dtype=bool)
# marking first n indexes as true
mask[:N] = True
# shuffling the mask
np.random.shuffle(mask)
mask = mask.reshape(X, Y)
# applying mask to the data
data[mask] = np.nan
print(data)
输出:
方法3:使用insert()
使用insert()函数会将一整行或一整列转换为NaN。这个函数沿着所述的轴在给定的索引前插入数值。
语法 :
numpy.insert(array, object, values, axis = None)
步骤:
- Import module
- Create data
- 使用插入的Nan值
- Print data
示例:
import numpy as np
a = np.array([(13.0, 1.0, -47.0), (12.0, 3.0, -47.0), (15.0, 2.0, -44.0)])
# adding nan values to the row
np.insert(a, 2, np.nan, axis=0)
# adding nan values to the row
np.insert(a, 2, np.nan, axis=1)
输出: