本周学习
上周在进行简单的实例编写时,发现了好多问题,最主要的就是我对numpy、pandas、matpolib等库不是特别熟悉,基础不够,于是本周开始重新学习numpy及pandas库
”熊猫库“pandas——数据处理
1、主要的数据类型:ndarra
2、(由于pandas我没找到合适的数据源来对它进行操作,明天再更,话说不是我懒,没有大量数据pandas的效果出不来好吧QAQ;之前想过用水仙花数据集和波士顿房价数据集,但效果不太顶)
numpy——矩阵
1、主要的数据类型:DataFrame
2、矩阵的直接创建(不常用)
import numpy
#通过numpy.array直接创建矩阵
vec = numpy.array([[1,2,3,4],[2,3,4,5],[4,5,6,8]])
print(vec)
print(type(vec))
3、从文件中读取数据(常用)
world_alcohol = numpy.genfromtxt("world_alcohol.txt")
4、对矩阵的切片或提取
#对矩阵的切片或整行整列提取;或者将矩阵转化为bool类型的矩阵
print(vec[:,3])
print(vec[0:2,0:3])
print(vec[0,-1])
print(vec[[1,0],[2,3]])
print(vec == 5)
print(3 in vec)
5、如何简单高效地创建一个全零或全一矩阵
#制造全零或全1的矩阵,dtype规定每一个元素的类型
zeros = numpy.zeros((4, 8), dtype="int32")
print(zeros)
ones = numpy.ones((2,3))
print(ones)
6、常用的对矩阵的宏观方法以及另一种创建矩阵的高效方法
#通过numpy.arange创建矩阵,dtype查看元素的类型,ndim查看矩阵维度,min和max方法查找最小和最大的元素
matrix = numpy.arange(20).reshape(4,5)
print(matrix)
print(matrix.dtype)
print(matrix.ndim)
print(matrix.min())
print(matrix.max())
7、对整个矩阵的每个元素分别进行各种三角函数运算,得到一个新的同尺寸矩阵;有一个快速创建矩阵的方法:linspace
#通过numpy.linspace创建矩阵,在A-B之间均匀取出C个数;numpy.sin对整个矩阵的元素求sin值,cos、tan同理
from numpy import pi
matrix2 = numpy.linspace(2, pi, 20).reshape(4, 5)
print(matrix2)
print(numpy.sin(matrix2).reshape(4, 5))
print(numpy.cos(matrix2).reshape(4, 5))
print(numpy.tan(matrix2).reshape(4, 5))
8、矩阵的相乘和矩阵的点乘
arr1 = numpy.array([[1,5],[7,2]])
arr2 = numpy.arange(1,5).reshape(2,2)
print(arr1)
print(arr2)
print(arr1*arr2) #每个元素对应相乘
print(arr1.dot(arr2))#两种方法实现矩阵相乘
print(numpy.dot(arr1,arr2))
9、对矩阵的方根运算以及绝对值运算
a = numpy.arange(1,13).reshape(3,4)
print(numpy.exp(a))#求e的指数次方
print(numpy.sqrt(a))#求各元素的平方根
print(numpy.square(a))#求各元素的平方
b = numpy.random.randn(16).reshape(4,4)
print(b.astype(numpy.int32))#利用astype来进行类型转换
print(numpy.fabs(b))#求绝对值
10、矩阵的对数运算、分别以以e、2、10为底
#对各个元素求自然对数,以e、2、10为底
from numpy import e
c = numpy.linspace(e,e*9,8).reshape(2,4)
print(numpy.log(c))
print(numpy.log2(c))
print(numpy.log10(c))
11、矩阵的四舍五入运算(可指定精确度,即around的第二个参数)以及向上向下取整
#利用around取整,利用floor向下取整,利用ceil向上取整,类型转换也可用来进行向下取整
d = numpy.array([[0.547,4.26,11.4,8.9732],[1.8,12.56,3.14,0.4768]])
print(numpy.around(d))
print(numpy.around(d,1))
print(numpy.around(d,-1))
print(d.astype(numpy.int32))
print(numpy.floor(d))
print(numpy.ceil(d))
12、求转置矩阵(话说这个方法名好奇怪,是一个单独的大写字母——T)
#利用ravel将矩阵转化为向量,T求转置矩阵,使用reshape时可以只指定一个维度,另一个维度填-1,会自动划分
e = numpy.floor(numpy.random.random((3,4))*20)
print(e)
print(numpy.ravel(e))
print(e.T)
print(e.reshape(2,-1))
13、矩阵的拼接以及矩阵的拆分
#矩阵的拼接
arr1 = numpy.floor(numpy.random.random((2,3))*10)
arr2 = numpy.floor(numpy.random.random((2,3))*10)
print(arr1,'
',arr2)
print(numpy.hstack((arr1,arr2)))
print(numpy.vstack((arr1,arr2)))
print("------------------------我是分割线------------------------")
#矩阵的拆分,传单个数字就是平均分成几份,不能均分会报错,传元组就是切割的位置
vector = numpy.arange(0,12).reshape((2,6))
print(vector)
print(numpy.hsplit(vector,(1,)))
话说之前Anaconda自带的jupyter notebook一直被我忽视了,这周发现它竟然意外地好用,一个cell一个cell地run,效率奇高,从而不会被整个代码中的其它的输出干扰,更加方便对于结果的查看,只是jupyter notebook没有自动补齐以及debug的功能