数据分析三剑客:NumPy库入门1

前言

  NumPy(Numerical Python)是Python的一种开源的数值计算扩展。提供多维数组对象,各种派生对象(如掩码数组和矩阵)。

  这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学逻辑形状操作排序选择输入输出离散傅立叶变换基本线性代数基本统计运算随机模拟等等。

  几乎所有从事Python工作的数据分析师都利用NumPy的强大功能:

  • 强大的N维数组

  • 成熟的广播功能

  • 用于整合C/C++和Fortran代码的工具包

  NumPy提供了全面的数学功能、随机数生成器和线性代数功能。

  我将用三篇文章介绍关于NumPy的一些用法。

基本操作

数组创建

  创建数组的最简单的方法就是使用array函数,将Python下的list转换为ndarray

import numpy as np
l = [1,3,5,7,9] # 列表
arr = np.array(l) # 将列表转换为NumPy数组
arr # 数据一样,NumPy数组的方法,功能更加强大
# 输出为
# array([1, 3, 5, 7, 9])

  我们可以利用np中的一些内置函数来创建数组,比如我们创建全0的数组,也可以创建全1数组,全是其他数字的数组,或者等差数列数组,正态分布数组,随机数。

import numpy as np
arr1 = np.ones(10) 
# 输出为:array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
arr2 = np.zeros(10) 
# 输出为: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
arr3 = np.full(shape = [2,3],fill_value=2.718) 
# 输出为:
# array([[2.718, 2.718, 2.718],
#       [2.718, 2.718, 2.718]])
arr4 = np.arange(start = 0,stop = 20,step = 2) 
# 等差数列 输出为:array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
arr5 = np.linspace(start =0,stop = 9,num = 10) 
# 等差数列 输出为:array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
arr6 = np.random.randint(0,100,size = 10) 
# int随机数 输出为:array([ 4,  8, 79, 62, 34, 35,  2, 65, 47, 18])
arr7 = np.random.randn(5) 
# 正态分布 输出为:array([ 0.57807872,  0.37922855,  2.37936837, -0.28688769,  0.2882854 ])
arr8 = np.random.random(size = 5) 
# float 随机数 输出为:array([0.59646412, 0.37960586, 0.38077327, 0.76983539, 0.22689201])

查看操作

  NumPy的数组类称为ndarray,也被称为别名 array。请注意,numpy.array这与标准Python库类不同array.array,后者仅处理一维数组且功能较少。

ndarray对象的重要属性有:

2.1 数组的轴数、维度

import numpy as np
arr = np.random.randint(0,100,size = (3,4,5))
arr.ndim # 输出 3

2.2 数组尺寸形状

arr.shape # 输出 (3,4,5)

2.3 数组元素的总数

arr.size # 输出 3*4*5 = 60

2.4 数据类型

arr.dtype # 输出 dtype('int64')

2.5 数组中每个元素的大小

arr.itemsize #输出是 8 ,因为数据类型是int64,
#64位,一个字节是8位,所以64/8 = 8

文件IO操作

3.1 保存数组

  save方法保存ndarray到一个npy文件,也可以使用savez将多个array保存到一个.npz文件中。

x = np.random.randn(5)
y = np.arange(0,10,1)
#save方法可以存一个ndarray
np.save("x_arr",x)
#如果要存多个数组,要是用savez方法,
#保存时以key-value形式保存,key任意(xarr、yarr)
np.savez("some_array.npz",xarr = x,yarr=y)

3.2 读取

  load方法来读取存储的数组,如果是.npz文件的话,读取之后相当于形成了一个key-value类型的变量,通过保存时定义的key来获取相应的array

np.load('x_arr.npy') # 直接加载
# 通过key获取保存的数组数据
np.load('some_array.npz')['yarr']

3.3 读写csv、txt文件

arr = np.random.randint(0,10,size = (3,4))
#储存数组到txt文件
np.savetxt("arr.csv",arr,delimiter=',') 
# 文件后缀是txt也是一样的
#读取txt文件,delimiter为分隔符,dtype为数据类型
np.loadtxt("arr.csv",delimiter=',',dtype=np.int32)

数据类型

ndarray的数据类型:

  • int: int8、uint8、int16、int32、int64

  • float: float16、float32、float64

  • str

array创建时,指定

import numpy as np
np.array([1,2,5,8,2],dtype = 'float32')
# 输出 :array([1., 2., 5., 8., 2.], dtype=float32)

asarray转换时指定

import numpy as np
arr = [1,3,5,7,2,9,0]
# asarray 将列表进行变换
np.asarray(arr,dtype = 'float32')
# 输出:array([1., 3., 5., 7., 2., 9., 0.], dtype=float32)

数据类型转换astype

import numpy as np
arr = np.random.randint(0,10,size = 5,dtype = 'int16')
# 输出:array([6, 6, 6, 6, 3], dtype=int16)
# 使用astype进行转换
arr.astype('float32') 
# 输出:array([1., 4., 0., 6., 6.], dtype=float32)

数组运算

加减乘除幂运算

import numpy as np
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([2,3,1,5,9])
arr1 - arr2 # 减法
#输出:array([1., 6., 6., 5., 0.], dtype=float32)
arr1 * arr2 # 乘法
#输出:array([ 2,  6,  3, 20, 45])
arr1 / arr2 # 除法
#输出:array([0.5 , 0.66666667, 3. , 0.8 , 0.55555556])
arr1**arr2 # 两个星号表示幂运算
#输出:array([1 ,8 ,3 ,1024 ,1953125])

逻辑运算

import numpy as np
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([1,0,2,3,5])
arr1 < 5
#输出:array([ True,  True,  True,  True, False])
arr1 >= 5
#输出:array([False, False, False, False,  True])
arr1 == 5
输出:array([False, False, False, False,  True])
arr1 == arr2
#输出:array([ True, False, False, False,  True])
arr1 > arr2
#输出:array([False,  True,  True,  True, False])

数组与标量计算

#数组与标量的算术运算也会将标量值传播到各个元素
import numpy as np
arr = np.arange(1,10)
1/arr
#输出:array([1. , 0.5 , 0.33333333, 0.25 , 0.2     #  ,0.16666667, 0.14285714, 0.125 , 0.11111111])
arr+5
#输出:array([ 6,  7,  8,  9, 10, 11, 12, 13, 14])
arr*5
#输出:array([ 5, 10, 15, 20, 25, 30, 35, 40, 45])

*=、+=、-=、/=操作

#某些操作(例如+=和*=)只会修改现有数组,而不是创建一个新数组。
import numpy as np
arr1 = np.arange(5)
arr1 +=5
arr1 -=5
arr1 *=5
arr2 = arr1.astype(np.float32)
# arr /=5 不支持运算
arr2 /= 5

更多内容主页获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值