俯仰唯唯网

100天精通Python(数据分析篇)——第52天:numpy完结

100天精通Python(数据分析篇)——第52天:numpy完结

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、天精通拷贝
    • 1. 赋值
    • 2. 视图
    • 3. 副本
    • 4. 注意点copy和view
  • 二、据分结numpy常用方法
    • 1. 小技巧
    • 2. 生成随机数
  • 三、析篇numpy中的第天nan和inf
  • 四、书籍推荐

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、天精通华为云享专家、据分结阿里云专家博主、析篇2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是第天专门针对Python零基础小白所准备的一套完整教学,从0到100的天精通不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进两百人Python全栈交流群(手把手教学,据分结问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、析篇Web、第天爬虫、天精通数据分析、据分结可视化、析篇机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

一、拷贝

1. 赋值

简单的赋值不会创建数组对象的副本。相反,它使用原始数组的相同id()来访问它。id()返回Python对象的通用标识符,类似于C中的指针。

一个数组的任何变化都反映在另-个数组上。例如,一个数组的形状改变也会改变另一个数组的形状

>>>import numpy as np>>>>>>x = np.array([1, 2, 3, 4, 5, 6])>>>print("x数组: ")x数组:>>>print(x)[1 2 3 4 5 6]>>>>>>print(id(x))2545959638000>>>y = x>>>print(id(y))2545959638000>>>>>>y.shape = (3, 2)>>>print(y)[[1 2] [3 4] [5 6]]>>>>>>print(x)[[1 2] [3 4] [5 6]]

2. 视图

又可称为浅拷贝,是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。对视图进行修改,它会影响到原始数据,物理内存在同一位

发生情况:

  • numpy的切片操作返回原数据的视图,修改数据会影响到原始数组

    >>>import numpy as np>>>x = np.arange(12)>>>print("x数组: ")x数组:>>>>>>print(x)[ 0  1  2  3  4  5  6  7  8  9 10 11]>>>>>>print("创建切片y:")创建切片y:>>>y = x[3:]>>>print(y)[ 3  4  5  6  7  8  9 10 11]>>>>>>print("修改切片y,查看x与y")修改切片y,查看x与y>>>y[1] = 100>>>print("查看y: ")查看y:>>>print(y)[  3 100   5   6   7   8   9  10  11]>>>print("查看x: ")查看x:>>>print(x)[  0   1   2   3 100   5   6   7   8   9  10  11]
  • 调用ndarray的view()函数产生一个视图创建一个新的数组对象,该方法创建的新数组的维数更改不会更改原始数据的维数

    >>>import numpy as np>>>>>>x = np.arange(6).reshape((3, 2))>>>print("x数组: ")x数组:>>>print(x)[[0 1] [2 3] [4 5]]>>>>>>print("创建x的视图y:")创建x的视图y:>>>y = x.view()>>>print(y)[[0 1] [2 3] [4 5]]>>>>>>print("对比x与y的地址: ")对比x与y的地址:>>>print("x的地址: ")x的地址:>>>print(id(x))2546234302800>>>print("y的地址: ")y的地址:>>>print(id(y))2546234302896>>>print("修改y,查看x与y")修改y,查看x与y>>>y[1][0] = 100>>>print("查看y: ")查看y:>>>print(y)[[  0   1] [100   3] [  4   5]]>>>print("查看x: ")查看x:>>>print(x)[[  0   1] [100   3] [  4   5]]

3. 副本

又可称为深拷贝,是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同- -位置

发生情况:

  • 调用ndarray的copy()函数产生一个副本
  • 作用:创建一个副本
  • 说明:对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置
>>>import numpy as np>>>>>>x = np.array([[10, 10], [2, 3], [4, 5]])>>>print("x数组: ")x数组:>>>print(x)[[10 10] [ 2  3] [ 4  5]]>>>>>>print("创建x的深层副本y")创建x的深层副本y>>>y = x.copy()>>>print(y)[[10 10] [ 2  3] [ 4  5]]>>>>>>print(y is x)False>>>>>>print(y)[[10 10] [ 2  3] [ 4  5]]

4. 注意点copy和view

  • a=b:完全不复制,a和b相互影响
  • a = b[:]:视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  • a = b.copy():复制,a和b互不影响

二、numpy常用方法

1. 小技巧

1)获取最大值最小值的位置

# 一维数组>>>t1array([11, 12, 13, 14, 15, 16, 17, 18, 19])>>>np.argmax(t1,axis=0) #返回最大值索引8>>>np.argmin(t1,axis=0) #返回最小值索引0# 多维数组就返回每行的最大或最小值>>>t2 = np.arange(0,16).reshape(4,4)>>>t2array([[ 0,  1,  2,  3],       [ 4,  5,  6,  7],       [ 8,  9, 10, 11],       [12, 13, 14, 15]])>>>np.argmax(t2,axis=0)array([3, 3, 3, 3], dtype=int64)>>>np.argmin(t2,axis=0)array([0, 0, 0, 0], dtype=int64)

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

>>>np.zeros((3,4))array([[0., 0., 0., 0.],       [0., 0., 0., 0.],       [0., 0., 0., 0.]])

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

>>>np.ones((3,4))array([[1., 1., 1., 1.],       [1., 1., 1., 1.],       [1., 1., 1., 1.]])

4)创建一个对角线为1的正方形数组(方阵):np.eye(3)

>>>np.eye(3)array([[1., 0., 0.],       [0., 1., 0.],       [0., 0., 1.]])>>>np.eye(10)array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],       [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])

2. 生成随机数

方法说明
np.random.rand(d0, d1,.. dn)创建d0-dn维度的均匀分布的随机数数组,浮点数,范围从0-1
np.random.randn(d0,d1,. .dn)创建d0-dn维度的标准正态分布随机数,浮点数,平均数0,标准差1
np.random.randint(low, high,(shape))(常用)从给定上下限范围选取随机数整数,范围是low,high,形状是shape
np.random.uniform( low, high,(size))产生具有均匀分布的小数数组,low起始值,high结束值,size形状
np.random.normal(loc, scale,(size))从指定正态分布中随机抽取样本,分布中心是loc (概率分布的均值) ,标准差是scale,形状是size
np.random.seed(s)随机数种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以每次生成相同的随机数
>>>np.random.randint(10,20,(3,3))array([[13, 15, 18],       [18, 17, 15],       [15, 10, 12]])>>>np.random.randint(10,20,(3,3))array([[17, 12, 16],       [10, 10, 14],       [15, 14, 12]])

三、numpy中的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)

    >>>type(np.nan)>>>type(np.inf)

注意点

  • 1.两个nan是不相等的

    >>>np.nan == np.nanFalse
  • 2.np. nan! =np. nan

    >>>np.nan != np.nanTrue
  • 3.利用以上的特性,判断数组中nan的个数

    >>>b = np.array([1,2,3,4,5],dtype='float')>>>barray([1., 2., 3., 4., 5.])>>>b[b==1.] = np.nan>>>barray([nan,  2.,  3.,  4.,  5.])>>>b[b==2.] = np.nan>>>barray([nan, nan,  3.,  4.,  5.])>>>np.count_nonzero(b!=b)2
  • 4.由于2,那么如何判断-个数字是否为nan呢?通过np.isnan(a)来判断,返回bool类型,比如希望把nan替换为0

    >>>b	array([nan, nan,  3.,  4.,  5.])>>>np.count_nonzero(np.isnan(b))2
  • 5、nan和任何值计算都为nan

    >>>import numpy as np>>>t1 = np.arange(1,11).reshape(2,5)>>>t1array([[ 1,  2,  3,  4,  5],      [ 6,  7,  8,  9, 10]])>>>np.sum(t1)55>>>np.sum(t1,axis=0) # axis=0表示每列相加的结果array([ 7,  9, 11, 13, 15])>>>np.sum(t1,axis=1) # axis=1表示每行相加的结果array([15, 40])>>>t2 = np.array([1,2,3,4,5],dtype='float')>>>t2[t2==1.] = np.nan>>>t2array([nan,  2.,  3.,  4.,  5.])>>>np.sum(t2)nan

那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行

那么问题来了:

  • 如何计算一组数据的中值或者是均值
  • 如何删除有缺失数据的那一行(列)[在pandas中介绍]

四、书籍推荐

书籍展示:《人工智能导论》

在这里插入图片描述


【书籍内容简介】

  • 包括人工智能概述、机器学习、神经网络与深度学习、智能语音处理及应用、计算机视觉处理及应用、自然语言处理及应用、知识图谱及应用、机器人、经典智能算法 Python 实现、展望等。
    本书适合作为高等院校人工智能、计算机科学与技术、大数据、软件工程或相关专业的入门教材,也适合从事相关工作的人工智能爱好者和工程师学习阅读。
  • 京东自营:https://item.jd.com/13287419.html

未经允许不得转载:俯仰唯唯网 » 100天精通Python(数据分析篇)——第52天:numpy完结