数据分析-numpy总结笔记
一、简介1.Numpy介绍NumPy (Numerical Python)是一个开源的Python科学计算库,于快速处理任意维度的数组。NumPy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。NumPy使用ndarray对象来处理多维数组,该对象是-一个快速而灵活的大数据容器。2.Numpy的优点●对于同样的数值计算任务,使用NumPy要比直接编
一、简介
1.Numpy介绍
NumPy (Numerical Python)是一个开源的Python科学计算库,于快速处理任意维度的数组。NumPy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。NumPy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
2.Numpy的优点
●对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多 ;
●NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且能够提升的性能是与数组中的元素成比例的;
●NumPy的大部分代码都是用C语言写的,底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多。
3.Numpy的ndarray与Python原生list运算效率比较
import random
import time
import numpy as np
a = []
for i in range(100000000):
a.append(random.random()) #产生一个随机数并添加到a列表中
t1 = time.time() #记录使用sum函数的起始时间
sum1 = sum(a)
t2 = time.time() #记录使用sum函数求和的终止时间
b = np.array(a)
t3 = time.time() #记录使用np.sum()的起始时间
sum2 = np.sum(b)
t4 = time.time() #记录使用np.sum()的终止时间
print('python原生list运算时间:',(t2-t1),'\nndarray运算时间:',t4-t3)
经过不同长度数据的测试,很明显,numpy的ndarray比python原生的list的运算速度要快几倍。
二、Numpy的Ndarray对象
1.创建一维数组
import numpy as np
list1 = [1,2,3,4]
oneArray = np.array(list1)
print(oneArray)
print(type(oneArray))
# 传入range生成序列
oneArray = np.array(range(10))
print(oneArray)
print(type(oneArray))
# 使用numpy自带的np.arange()生成数组
oneArray = np.arange(0,10,2) #生成0-9,步长是2的数组
print(oneArray)
print(type(oneArray))
2.创建二维数组
import numpy as np
list1 = [[1,2],[3,4],[5,6]]
oneArray = np.array(list1)
print(oneArray)
3.常用属性
#获取数组的维度
print(oneArray.ndim)
# 形状(行、列)
print(oneArray.shape)
# 有多少个元素
print(oneArray.size)
4.调整数组的形状
# 将多维变成一维数组
print(oneArray)
#默认情况下'C'以行的顺序展开,'F'意味着以列的顺序展开
# 方法一:
print('以列的顺序展开:',oneArray.flatten(order='F'))
print('以行的顺序展开:',oneArray.flatten(order='C'))
# 方法二:
print('以列的顺序展开:',oneArray.reshape((6,),order='F'))
print('以行的顺序展开:',oneArray.reshape((6,),order='C'))
# 设置一个一维数组t
t = np.arange(24)
# 将t这个一维数组转换为二维数组
print('一维转二维:\n',t.reshape((4,6)))
# 将一维数组转换为三维数组
print('一维转三维:\n',t.reshape((2,3,4)))
# 将数组转换为list
a = oneArray.tolist()
print(a)
print(type(a))
三、数组的计算
1.数组和数的计算
# 由于numpy的广播机制,在运算过程中,
# 加减乘除的值被广播到所有的元素上面
f = np.array([1,2,3,4,5],dtype=np.int16)
print(f)
print(f+1)
print(f*2)
2.数组与数组之间的操作
#同种形状的数组(两数组中对应位置进行计算操作)
t1 =np.arange(24).reshape((6,4)) #0-23,6行4列的矩阵
t2 =np.arange(100,124).reshape((6,4)) #100-123,6行4列的矩阵
print(t1+t2)
print(t1*t2)
#不同形状的多维数组计算
# 必须满足:(M行, N列) * (N行, Z列) = (M行, Z列)
import numpy as np
score = np.array([[1,4,7],[2,5,8],[3,6,9]])
a = np.array([[1,4],[2,5],[3,6]])
print(score)
print(a)
np.dot(score,a)
#行数或者列数相同的一维数组和多维数组可以进行计算
#行形状相同(会与每一行数组的对应位相操作)
t1 =np.arange(24).reshape((4,6))
t2 =np.arange(6)
print(t1+t2)
print(t1*t2)
# 列形状相同(会与每一个相同维度的数组的对应位相操作)
t1 =np.arange(24).reshape((4,6))
t2 =np.arange(4).reshape((4,1))
print(t1+t2)
print(t1*t2)
四、数组中的轴
1.什么是轴
在numpy中可以理解为方向,使用0,1, 2数字表示,对于一个一维数组,只有一个0轴, 对于2维
数组(shape (2, 2))有0轴和1轴,对于3维数组 (shape (2, 2, 3) )有0, 1, 2轴
2.为什么要学习轴:
有了轴的概念后,我们计算会更加方便,比如计算-个2维数组的平均值, 必须指定是计算哪
个向上面的数字的平均值。
# axis=0
a = np.array([[1,2,3],[4,5,6]])
print(a)
print(np.sum(a,axis=0))
# axis=1
print(np.sum(a,axis=1))
# axis=2
a = np.arange(27).reshape((3,3,3))
print(a)
b = np.sum(a,axis=2)
print('======')
print(b)
五、数组的索引和切片
1.一维数组的操作方法
a = np.arange(10)
print(a[2:9:2]) #从索引2到索引9,步长为2
# 如果放置一个参数,将返回与该索引相应位置的单个元素
print(a[4])
2.多维数组的操作方法
a = np.arange(24).reshape(4,6)
print(a)
print(a[1]) #取第一行,也可写作a[1,]
print(a[1:3]) #截取第1到3行
print(a[:,1]) #取第一列
六、数组中的数组修改
a = np.arange(24).reshape(4,6)
print(a)
# 修改第1行第1列元素的值
a[0,0] = 1
#修改第2行的值
a[1,:] = 2
# 修改第1列的值
a[:,0] = 1
print(a)
七、数组的添加和删除
1.数组的添加
numpy . append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。输入数组的维度必须匹配否则将生成ValueError。
参数说明:
arr:输入数组
values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
axis:默认为None。 当axis无定义时,是横向加成,返回总是为一维数组!当axis有定
axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时, 数组是加在右边(行数要相同)
import numpy as np
# 数组的添加
a = np.array([[1,2,3],[4,5,6]])
print(a)
#向数组添加元素
print(np.append(a,[7,8,9])) #当axis无定义时,返回值总是一维数组!
#沿0轴添加元素
print(np.append(a,[[7,8,9]],axis=0))
# 沿1轴添加元素
print(np.append(a,[[10],[11]],axis=1))
numpy. insert函数在给定索引之前,沿给定轴在输入数组中插入值。如果值的类型转换为要插入,则它与输入数组不同。插入没有原地的, 函数会返回一个新数组。此外, 如果未提供轴,则输入数组会被展开。
a = np.array([[1,2],[3,4],[5,6]])
print(a)
# 未传递axis参数,在插入之前输入数组会被展开为一维数组
print(np.insert(a,3,[11,12])) #插入到3号位置
#传递了axis参数。会被广播
#沿0轴广播
print(np.insert(a,3,[11,12],axis=0))
# 沿1轴广播
print(np.insert(a,2,[11,12,13],axis=1))
2.数组的删除
a = np.arange(12).reshape(3,4)
print(a)
#未传递axis参数,在删除之前输入数组会被展开为一维数组
print(np.delete(a,3))
#传递axis参数
print(np.delete(a,2,axis=0)) #删除第3行
print(np.delete(a,3,axis=1)) #删除第4列
import numpy as np
score = np.array([[1,4,7],[2,5,8],[3,6,9]])
a = np.array([[1,4],[2,5],[3,6]])
print(score)
print(a)
np.dot(score,a)
八、numpy的计算
import numpy as np
score = np.array([[80,88],[82,81],[75,80]])
print(score)
#获取火灾数据最大值
result = np.max(score)
print(result)
#获取某一轴上的数据最大值
result = np.max(score,axis=0)
print(result)
#获取火灾数据最小值
result = np.min(score)
print(result)
#求平均值
result = np.mean(score,axis=0)
print(result)
九、数组中的Nan和Inf
inf表示无穷大,nan表示缺失的数据
nan和任何数计算都为nan
a = np.array([[80,88],[np.inf,np.nan],[np.nan,80]])
print(a)
# 判断数组中非零的个数
print(np.count_nonzero(a))
# 将第0行第1列的数改为nan
a[0,1] = np.nan
print(a)
十、二维数组的转置
a = np.arange(12).reshape(3,4)
print(a)
print(a.T)
十一、总结
更多推荐
所有评论(0)