数据分析第一步:NumPy学习笔记

4 篇文章 0 订阅
2 篇文章 0 订阅

本篇文章主要借鉴《利用Python进行数据分析》一书,文中很多例子是博主自己举例,基本都没有给出答案,有想要学习的同学可以自己把代码敲出来然后运行,查看结果,实践是编程学习的第一步啦~

一、背景

1.为什么我们要学numpy:numpy是numerical python的简称,是python进行数值计算所必须要使用到的,它本身并不提供科学函数,只是提供了简洁易用的C语言API,将数据传递给外部类库,再将计算结果按照数组的方式返回(数组理解与C语言相同)。

2.安装:pip install numpy

3.导入:import numpy as np(这里是将numpy导入并命名为np,在之后操作中更简便)

二、基础知识

1.ndarray是numpy最核心部分——N维数组对象,它是一个通用的多维同类数据容器,即每一个ndarray对象里包含的每一个元素一定是同一个类型。

2.生成ndarray对象,最简单的是用array函数,array函数可以接收任意的序列型对象:

data1=[1,2,3.4]
a=np.array(data1)

如果是嵌套序列,即包含了列表的列表,可以转换为多维数组:

data2=[[1,2],[4,5]]
a=np.array(data2)

要注意的是这里,只有当第一个内嵌序列和第二个内嵌序列同尺寸的时候才能生成多维数组的形式,如果不等长则会分别显示成list形式。可以用shape属性查看数组对象的长度,用dtype查看对象类型:

a.shape
a.dtype

3.此外,ndarray还提供了其他函数来创建数组:zeros创建全0数组,ones创建全1数组,random.randn创建随机数数组,arange函数会从0开始依次创建自然数数组

np.zeros([2,3])
np.ones(10)
np.random.randn(2,3)或者np.random.random([2,3])
np.arange(10)

4.numpy的数据类型:int8,int16,int32,int64,float16,float32,float64,float128,complex64,complex128,complex256,bool,object,string_,unicode_

不同类型之间可以用astype函数相互转换:

arr=np.array([1.2,2.3,3.4])
arr1=arr.astype(np.int32)
arr2=arr.astype(np.complex64)

如果精度高的转换为精度低的,则会去掉高精度部分,例如arr1,结果为array([1, 2, 3])

5.numpy数组的算术运算是逐元素的,一旦进行操作,会对数组里每个元素都操作arr*3,arr*arr,arr-arr(得到全0数组)等算术运算操作都可以

如果将同尺寸数组之间比较,则会产生一个布尔值数组:arr1>arrr2,返回的都是布尔类型

6.numpy数组可以通过索引找到某个特定的值:

arr=np.arange(10)
arr[3]


得到的结果是3,数组从0开始分配,也从0开始索引

还可以通过切片得到数组的某些值:arr[5:8],得到array([5, 6, 7])

如果对切片进行重新赋值操作,原来的数组也会跟着改变,这是因为numpy的数组切片并不是原数组的复制,而是直接原数组的视图,如果要进行复制,一定要显示地写成:arr2=arr[5:8].copy()

7.布尔索引:用布尔值代替具体位置进行索引,只有当为True的时候才显示视图

name=np.array(['a','b','c','d','a'])
arr=np.arange(15).reshape(5,3)
arr[name=='a']

也可以用取反操作,获取相反的结果:arr[~(name=='a')]

如果需要将多个布尔条件联合,需要用到&和|,此时and和or不可用:arr[(name=='a')|(name=='b')]

8.负索引:负索引从-1开始:
arr[[-2,-4]]  挑选出特定序列,即倒数第2行和倒数第4行
arr[-4:-2]   挑选出连续序列,此时显示的是倒数第3行和倒数第2行

9.数组的转置和换轴,这个博主讲的非常好,画的图也直观形象,推荐给大家:https://blog.csdn.net/u012762410/article/details/78912667

三、numpy的通用函数(逐元素)

1.一元通用函数:sqrt-开方函数,exp-指数函数(默认底数为e)

a=np.arange(10)
np.sqrt(a)
np.exp(a)

2.二元通用函数:add-加法,maximum-取最大值,minimum-取最小值

x=np.random.randn(8)
y=np.random.randn(8)
np.add(x,y)
np.maximum(x,y)
np.minimum(x,y)

3.返回多数组函数:modf返回浮点值的小数和整数部分

arr=np.random.randn(15)
remainder,whole=np.modf(arr)

四、面向数组编程

1.where函数,where(条件,为真时的结果,为假时的结果)

x=np.random.randn(8)
y=np.random.randn(8)
result=np.where(y>0,x,0)

2.线性代数:dot函数

x=np.arange(6).reshape(2,3)
y=np.arange(6).reshape(3,2)
x.dot(y)或者np.dot(x,y)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值