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.]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值