numpy-04-nan

原文链接

数组的拼接

注意参数是元组,而不是两个ndarray

# 竖直拼接
print(np.vstack((t1, t2)))
print("*" * 100)
# 水平拼接
print(np.hstack((t1, t2)))

数组的行列交换

行交换
t[[0, 1], :] = t[[1, 0], :]
列交换
t[:, [0, 2]] = t[:, [2, 0]]

获取最大值最小值的位置

np.argmax(t,axis=0)  # 每一列的最值

np.argmin(t,axis=1)  # 每一行的最值

创建一个全0的数组:

np.zeros((3,4))

创建一个全1的数组:

np.ones((3,4))

创建一个对角线为1的正方形数组(方阵):

np.eye(3)

numpy生成随机数

image-20210126161907621

np.random.randint(1, 100, (3, 4))

# 输出
array([[56, 77,  9,  1],
       [13, 52, 59, 26],
       [50, 17, 99,  3]])
# 左闭右开

copy 和 view的区别

  1. a=b 完全不复制,a和b相互影响

  2. a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,

  3. a = b.copy(),复制,a和b互不影响

nan和inf

nan(NAN,Nan):

not a number表示不是一个数字

什么时候numpy中会出现nan:

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan

当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

inf(-inf,inf):

infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)

比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

注意点

两个nan是不相等的

可以根据这个判断有几个 nan np.count_nonzero(x != x),只有是nan的位置为True。

判断是否为nan:np.isnan(x)

nan和任何值计算都为 nan:例如:np.sum(x, axis = 0)结果为 array([147., 131., nan, 266., 198.])

nan和inf都是float类型的

numpy中的统计函数

  1. 求和:t.sum(axis=None)
  2. 均值:t.mean(a,axis=None) 受离群点的影响较大
  3. 中值:np.median(t,axis=None)
  4. 最大值:t.max(axis=None)
  5. 最小值:t.min(axis=None)
  6. 极值:np.ptp(t,axis=None) 即最大值和最小值只差
  7. 标准差:t.std(axis=None)

默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果

将ndarray中含有的 nan 替换为平均值或中位数

import numpy as np

t = np.arange(12).reshape((3, 4)).astype("float")
t[1, 2:] = np.nan
print(t)

# 将 nan 替换为该列的平均值
for i in range(t.shape[1]):  # 遍历每一列
    temp = t[:, i]  # 当前列
    num = np.count_nonzero(temp != temp)  # 当前列中 nan的数量
    if num != 0:  # 当前列中有nan
        temp2 = temp[temp == temp]  # 除去nan的列
        mean = temp2.mean()  # 平均值
        temp[np.isnan(temp)] = mean  # 将当前为nan的位置替换为当前列的均值

print(t)

输出

[[ 0.  1.  2.  3.]
 [ 4.  5. nan nan]
 [ 8.  9. 10. 11.]]

[[ 0.  1.  2.  3.]
 [ 4.  5.  6.  7.]
 [ 8.  9. 10. 11.]]
### NumpyNaN 的用法及其处理 Numpy 提供了一个特殊的浮点数 `NaN`(Not a Number),用于表示缺失数据或未定义的结果。这种机制对于数据分析非常有用,尤其是在处理不完整的数据集时。 #### 创建含有 NaN 值的数组 可以使用 `np.nan` 来创建包含缺失值的数组: ```python import numpy as np arr_with_nan = np.array([1, 2, np.nan, 4]) print(arr_with_nan) ``` 上述代码会生成一个一维数组 `[1., 2., nan, 4.]`[^2]。 #### 检测 NaN 值 为了检测数组中的 `NaN` 值,可以使用函数 `np.isnan()` 或者 Pandas 的方法 `.isnull()/.notnull()`。以下是通过 NumPy 实现的例子: ```python nan_mask = np.isnan(arr_with_nan) print(nan_mask) # 输出布尔掩码 [False False True False] ``` 这一步可以帮助识别哪些位置存在缺失值。 #### 替换 NaN 值 如果希望替换掉所有的 `NaN` 值,则可以通过条件赋值完成操作。例如,将所有 `NaN` 设置为零: ```python arr_cleaned = np.where(np.isnan(arr_with_nan), 0, arr_with_nan) print(arr_cleaned) # 结果将是 [1. 2. 0. 4.] ``` 或者利用更高级的方法如插补技术填充这些空缺项。 #### 统计忽略 NaN 的数值计算 当执行某些统计运算时,默认情况下可能会受到 `NaN` 影响而导致错误结果;因此许多 NumPy 函数提供了参数来跳过它们的影响。比如求平均值时可设置 `skipna=True` 参数(Pandas 风格)或者是直接调用专门针对这种情况设计好的版本像 `np.nanmean`, `np.nansum` 等等: ```python avg_without_nan = np.nanmean(arr_with_nan) sum_without_nan = np.nansum(arr_with_nan) print(f'Average without considering NaN: {avg_without_nan}') print(f'Sum ignoring NaN values: {sum_without_nan}') ``` 以上展示了如何有效管理并克服由 `NaN` 引发的各种挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值