numpy

numpy生成数组的三种方式:

import numpy as np

1、np.arange(24)

2、np.array(range(24))

3、np.array([1,2,3,4])

基础操作:

t1 = np.array([[1,2,3],[4,5,6]]) # 创建一个数组

查看t1的结构: t1.shape  # 返回一个tuple元组,(2,3)两行三列的数组

修改t1结构:t1.reshape((3,2)) #  把数组修改为三行两列的数组

查看t1的个数:t1.size  # 数组中的数据个数  6

查看t1的维度:t1.ndim  # 返回数组的维度,2

查看t1的数据类型:t1.dtype    # dtype('int32')

修改t1的数据类型:t1.astype(np.float)  

数组的计算(广播原则):

遵循广播原则:

数组与数的加减乘除 :数组中的每个数都要与该数进行相应的加减乘除

eg: t1 + 1

返回为:array([[2, 3, 4],[5, 6, 7]])

数组与数组的加减乘除:

a、与相同形状的数组的加减乘除,每个对应位置依次像加减乘除

t2 = np.arange(6).reshape(2,3)

eg:t1+t2 

 

b、与不相同形状的数组的加减乘除。

       1)对于行列的维度完全不同的不可以进行加减乘除  

    t3 = np.arange(12).reshape(3,4)

    eg: t1 + t3 

   2)两个数组中的行的数值一样,其中的一个数组的列是1的可以进行加减乘除

    eg:t4 = np.arange(2).reshape((2,1))

      t1 + t4

   3)两个数组中的列的数值一样,其中的一个数组的行是1的可以进行加减乘除

eg:t5 = np.arange(3).reshape(1,3)

t1+t5

读取数据:

 numpy的索引和切片

t1 = np.arange(24).reshape(4,6)

切片:

# 取三行四列的数据  t1[2,3]

# 取三行四行的数据 t1[[2,3],:]

# 取所有行第四列的数据 t1[:,3]

索引

t1[[0,1,2],[0,1,2]]  取得值是(0,0),(1,1),(2,2)

布尔索引:

t1[t1<10]

 

t1[t1!=t1]  # 找出该数组中的nan和inf

t1[t1==t1]  # 找出数组中的除了nan和inf的数据

numpy的常用方法:

三元运算:np.where(t1<10,0,10)  把<10的替换为0,其他的替换为10

裁剪:t1clip(10,20)   把<10的替换为10,大于20的替换为20

求和:t1.sum(axis=None)

均值:t1.mean(a,axis=None) 受离群点的影响较大

中值:np.median(t1,axis=None)

最大值:t1.max(axis=None)

最小值:t1.min(axis=None)

极值:np.ptp(t1,axis=None) 即最大值和最小值的差

标准差:t1.std(axis=None)

数组拼接:np.hstack((t1,t2))  # 两个数组水平拼接

     np.vstack((t1,t2))  # 数组竖直拼接

创建一个全0的数组: np.zeros((3,4))

创建一个全1的数组:np.ones((3,4))

注意:

nan与任何数做运算的结构都是nan

因此我们需要对nan进行替换,消除nan对数据结果的影响

缺失值的用均值替换

import numpy as np
def repalce_nan(t1):
"""
使用平均值替换数组中的nan
:param t1: 传入数组
:return: 返回替换后的数组
"""
for i in range(t1.shape[1]):
now_row = t1[:,i]
nan_count = np.count_nonzero(now_row!=now_row) # 每列数据中的nan的个数now_row!=now_row相当于np.isnan(now_row)
if nan_count != 0: # 当前行有nan
not_have_nan = now_row[now_row==now_row] # 拿取该列不是nan的数,得到一个数组
avg = not_have_nan.mean() # 对该数组计算平均值
now_row[now_row!=now_row] = avg # 把平均值赋值给nan
return t1
if __name__ == '__main__':
t1 = np.arange(24).reshape((4, 6)).astype(np.float)
t1[[2, 3], 4:] = np.nan # 将3,4行,5列之后的数据赋值为nan
t1 = repalce_nan(t1)
print(t1.astype(int))

  

原文地址:https://www.cnblogs.com/zbaby/p/11628985.html