python数据分析day3

python数据分析day3,第1张

python数据分析day3

目录

1.numpy

1.什么是numpy?

2.numpy中常见数据类型

3.创建numpy数组

 4.numpy数组的属性

 5.数组的运算

6.numpy轴

7.numpy读取本地数据

8.numpy的转置

 9.numpy的索引和切片

10.数组的拼接和分割

11.数组行列的交换

 12.numpy中的nan和inf

13.numpy中的统计方法


1.numpy 1.什么是numpy?

numpy是一个在python中做科学计算的基础库,支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!

2.numpy中常见数据类型

 

3.创建numpy数组
import numpy as np

#使用numpy生成数组,得到ndarray的类型
t1 = np.array([1,2,3,])
print(t1)
print(type(t1))

可以观察到numpy中数组类型名称为ndarray,这是numpy中最重要的对象。

在生成顺序序列时,可以使用python自带的range(),也可以使用numpy自带的arrange()。

t2 = np.array(range(4,10,2))
print(t2)
print(type(t2))

t3 = np.arange(4,10,2)
print(t3)
print(type(t3))

 

指定数据数据类型

t4 = np.array(range(1,4),dtype=float)
print(t4)
print(t4.dtype)

 调制数据类型

#调整数据类型
t5 = t4.astype("int8")
print(t5)
print(t5.dtype)

 使用numpy创建随机数数组时,可以使用numpy自带的random(),也可以使用random()第三方库。

 

import numpy as np
import random

#numpy中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

t8 = np.round(t7,2)
print(t8)
print(t8.dtype)

t9=np.random.rand(10)
print(t9)
print(t9.dtype)

 利用numpy.ones和numpy.zeros可以生成全一和全零的数组。

#生成全一或者全零数组
t1 = np.ones(10)
print(t1)

t2= np.zeros(10)
print(t2)

 4.numpy数组的属性

numpy.shape()会返回该数组维度的一个元组。

a1=np.array((1,2,3))
print (a1.shape)

a2 = np.array([[1,2,3],[4,5,6]])  
print (a2.shape)

 numpy.reshape()可以改变数组的维数。

a2 = np.array([[1,2,3],[4,5,6]])  
print(a2)
print (a2.shape)

a2=a2.reshape(3,2)
print(a2)
print (a2.shape)

a2=a2.reshape(6)
print(a2)
print (a2.shape)

 5.数组的运算

numpy中可以进行数组和数的运算以及数组和数组的运算。

在进行数组和数的运算时,该数会和数组中每一个元素进行对应的计算。

a2 = np.array([[1,2,3],[4,5,6]])  
print(a2)

a3=a2+5
print(a3)

a4=a2*2
print(a4)

在进行数组之间的运算时,如果两个数组维度一样,则每一个数对应做相关运算。

a2 = np.array([[1,2,3],[4,5,6]])  
print(a2)

a3 = np.array([[2,2,2],[5,5,5]])  
print(a3)

a4=a2+a3
print(a4)

 

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制

 

a = np.array([[ 0, 0, 0],
	               [10,10,10],
	               [20,20,20],
	               [30,30,30]])
b = np.array([1,2,3])
print(a.shape)
print(b.shape)
print(a - b)

 a为4行3列的一个矩阵,b为1行3列矩阵,都为三列,尽管维度不同但仍可以计算。具体计算过程为a的每一行减去b。

同理,维数为(3,3,3)的数组不可以和维数为(3,2)的数组进行运算,但维数为(3,3,2)的数组可以和维数为(3,2)的数组进行运算。

6.numpy轴

在一维数组中,只有axis0轴。

在二维数组中,轴的方向是分为行方向和列方向。0轴是沿着列的方向走,1轴是沿着行的方向走。

a = np.array([[ 0, 0, 0],
	               [10,10,10],
	               [20,20,20],
	               [30,30,30]])
print(a)
print(np.sum(a,axis=0))
print(np.sum(a,axis=1))

 

 观察输出结果可以发现,在指定axis等于0求和时,结果是每一列上元素的和;在指定axis等于1求和时,结果是每一行上元素的和。

7.numpy读取本地数据

使用numpy读取本地csv数据时,可以使用np.loadtxt()函数。

 

#设置文件路径
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

#csv文件中以逗号为分隔
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path,delimiter=",")

print(t1)
print("*"*100)
print(t2)
t1=np.arange(6).reshape(2,3)
print(t1)
print(t1.transpose())
print(t1.swapaxes(1,0))
print(t1.T)

 观察输出,如果不指定dbyte类型,输出会默认采用科学计数法。设置unpack=ture会对矩阵进行转置。

8.numpy的转置

对numpy中的数组进行转置时,可以使用多种方法。

1.transpose()函数。

2.swapaxes()函数。

3. .T方法。

t1=np.arange(6).reshape(2,3)
print(t1)
print(t1.transpose())
print(t1.swapaxes(1,0))
print(t1.T)

 9.numpy的索引和切片

一维数组很简单,基本和列表一致。

对于二维数组,可以取其中一行,或者从某一行开始取,也可以指定取哪几行。

t1=np.arange(6).reshape(3,2)
print(t1)
#取1行
print(t1[2])
#从第一行开始取
print(t1[1:])
#取1 2行
print(t1[[0,1]])

取列时,只需要在,:指定列的参数即可。

t1=np.arange(9).reshape(3,3)
print(t1)
#取第3列
print(t1[:,2])
#从第2列开始取
print(t1[:,1:])
#取1 2列
print(t1[:,[0,1]])

 

 取多行多列则需要同时指定行和列的参数。

t1=np.arange(9).reshape(3,3)
print(t1)
#取第3行第3列
print(t1[2:,2])
#从第二行第2列开始取
print(t1[1:,1:])
#取1 2行1 2列
t2 = t1[[0,1]]    #先取出想要的行数据
t2 = t2[:,[0,1]] #再取出要求的列数据
print(t2)

 ps:在需要取某几行某几列时,必须分两步执行,先取行数据,后取列数据,不能直接进行,否则得到的结果是交叉出的元素。

print(t1[[0,1],[0,1]])

输出结果为第1行和第一列交叉元素,第二行和第二列交叉元素。

10.数组的拼接和分割

进行数组的拼接时,有两种方法,vstack()进行垂直拼接;hstack()进行水平拼接。

t1=np.arange(9).reshape(3,3)
t2=np.ones((3,3))
print(np.vstack((t1,t2)))
print(np.hstack((t1,t2)))

 在进行数组的分割时,可以使用np.split()函数,也可以利用np.hsplit()进行垂直方向的分割,利用np.vsplit()进行水平方向的分割。

t1=np.arange(16).reshape(4,4)
print(np.split(t1,2,axis=0))
print(np.split(t1,2,axis=1))
t1=np.arange(16).reshape(4,4)
print(np.hsplit(t1,2))
print(np.vsplit(t1,2))

 

 在使用np.split()时,设置axis=0进行的是水平方向的分割,设置axis=1进行的是垂直方向的分割。

11.数组行列的交换

可以通过调整数组的行列位置来达到交换行列的目的。

t1=np.arange(9).reshape(3,3)
print(t1)
#交换2  3行
t1[[1,2],:]=t1[[2,1],:]
print(t1)
#交换 2 3列
t1[:,[1,2]]=t1[:,[2,1]]
print(t1)

 12.numpy中的nan和inf

nan(not of a number),当我们读取本地的文件为float时,如果有缺失,就会出现nan;或者当我们做了一个不合适的计算时,比如无穷大减去无穷大,也可能会出现nan。

nan和任何值做计算,结果都是nan。

两个nan是不相等的。

print(np.nan==np.nan)

 

inf(infinity)表示无穷大,-inf表示负无穷,比如一个数除以0,就会出现inf。

13.numpy中的统计方法

t1=np.arange(9).reshape(3,3)
print(np.sum(t1))
print(np.max(t1))
print(np.mean(t1))
print(np.median(t1))
print(np.ptp(t1))
print(np.std(t1))

 

参考网站 机器学习三剑客之Numpy - 简书 (jianshu.com) 

Python之Numpy详细教程_a373595475的博客-CSDN博客_numpy

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存