Numpy做数据分析,不懂这些是真的做不了数据分析

numpy

为什么要用numpy科学计算库?

一般情况下数据的组成:
行和列

学号 姓名 语文成绩
1 张三 89
2 李四 85
3 王五 100

一般数据都是这样组成的,我们可以把数据分为行和列,这样对于数据的运算是很方便的,同时也是和高效的,这就是使用munpy科学计算库的原因,numpy就是做矩阵的计算,且是底部实现是C语言,运算速度很快.

  • Numpy是一种数学工具,用于矢量计算
  • Numpy的对象称为矩阵/多维数组 轴指的是维度,轶指的是轴的数量

常用属性和方法

numpy对象常用属性

b = np.array([[1,2,3]
            ,[4,5,6]])
print(b.ndim)
print(b.shape)
print(b.dtype)
print(b.size)
print(b.itemsize)
a = np.array([1,2,3])
print(a.shape)
b = np.array([[1,2,3]
            ,[4,5,6]])
print(b.shape)

很可能用在debug中,看看在转化中shape是否有错误

  • ndim几个维度
  • shape各个维度的数值
  • dtype数据类型(int类型默认是32,float默认是64)
  • size元素总数
  • itemsize每个元素字节大小
  • arange(数字)生成一个数字列表
  • reshape(x,y)把numpy对象转为一个x行y列的对象

numpy打开文件

  • numpy.genfromtext(’*.txt’,delimite=’,’,dtype=‘str’)
  • 第一个参数表示txt文件的路径
  • 第二个参数表示把这个txt文件的内容按照,分隔
  • 第三个参数表示打开文件的方式(如果有float的数据也有stsr的数据,用str的方式打开,在转化float的数据转化)

numpy的创建

第一种方式numpy.array(*)

  • 注意*可以是一切的序列类型
  • dtype自动推断 ,一般是float64(用于数值计算),也可以显式指定
  • 另外对于set来说,直接传入时,仅作为一个元素,如果不想作为一个元素,那么可以在传入之前先转化为list或者tuple
    其他方式创建
    占位符
  • np.zeros/ones/empty(*) *代表各维度的元组
  • np.zeros_like/ones_like/empty_like(*) *表示参考另一个数组的dtype和shape
  • 应用于数组元素未知,但是大小已知,这种方式有着高昂的运算代价,不建议经常使用
    np.arange()相当于python中的range()函数,称为数组数列
    Np.eye/identity(),单位矩阵,特点是对角线为1,其余为0
# numpy创建一维二维矩阵
a = np.array([1,2,3])
print(a)
b = np.array([[1,2,3]
            ,[4,5,6]],dtype='int64')#在创建时可以指定numpy的数据类型
print(b)

注意在numpy创建数组时,内部的序列的类型必须是相同的

#这种事不被允许的
#a = np.array([1,2,3])
#print(a)
a = np.array([1,2,3,4.0],dtype='float')
print(a)

numpy的基本运算

  • 元素级运算
  • 特点是:矩阵中的每个元素和对应位置的元素进行运算
a = np.array([1,2,3])
a ==2

结果为:a[False,True,Flase]
布尔类型的值可以作为索引的值

a = np.array([1,2,3])
index =(a ==2)
print(index)

矩阵的布尔运算也支持与或非的操作

vector = np.array([5,10,15,20])
equal_to_ten_and_five = (vector = 10) & (vector = 5)
equal_to_ten_or_five = (vector = 10) | (vector = 5)

print(equal_to_ten_and_five)

结果为:[False False False False]

a = np.array([[1,1],
			 [0,1]])
b = np.array([[2,0],
			 [3,4]])
print("**********")
print(a)
print("**********")
print(b)
print("**********")
print(a*b)#得到的结果是对应位置相乘的结果
print("**********")
print(a.dot(b))#dot就是说矩阵的乘法
print("**********")
print(np.dot(a,b))#这是矩阵乘法的另一种表达方式

在这里插入图片描述

numpy的索引和切片操作

numpy是支持索引和切片操作的.我们把操作做一个分类:
按照对象维度可以分为一维多维
一维

  • arr[a]
  • arr[a:b]
  • arr[::-1]
a = np.array([1.0,2.0,3.0,4.0])
result1 = a[1]
print(result1)
result2 =a[1:3]
print(result2)
result3 =a[::-1]
print(result3)

多维
*

b = np.array([[1,2,3]
            ,[4,5,6]],dtype='int64')
result1 = b[:,1]#索引整个第一列
result2 = b[:0,2]#切片索引0.1列
result3 = b[0:1,0:1]#索引切片取第一行第一列
print(result1)
print(result2)
print(result3)

numpy对对象的类型转换

np.astype(*)
*表示的是数据类型

vector = np.array(["1","2","3"])
vector = vector.astype(float)
print(vector)

numpy的复制

numpy的复制,要求必须是显式的复制.

  • 完全不拷贝:函数调用和简单赋值
  • 浅复制

含义:不同的数组的对象共享同一数据
创建:新的数组对象指向同一数据

  • 完全拷贝:数组和数据 d=a.copy()

random函数的使用

np.random.random((2,3))

2代表行数3代表列数
inspace数的用法

np.inspace(0,50,100)#从0开始到50结束,平均取100个数作为numpy的对象

矩阵的常用操作:

矩阵格式的控制和变换:

  • ravel()函数:把矩阵变换为一维
  • a.shape =(6,2)#对numpy的对象进行重新的排列维数
  • np.T矩阵的转置
a  = np.floor(10*np.random.random((3,4)))
print('_______________')
print(a)
print('_______________')
print(a.ravel())#把矩阵变换为一维
a.shape =(6,2)#对numpy的对象进行重新的排列维数
print('_______________')
print(a)
print('_______________')
print(a.T)#获得a的转置矩阵
b = a.reshape(3,-1)#在numpy的维数变换时,指定行之后,其实列的值也确定了,可以用-1表示
print(b)

在这里插入图片描述

矩阵的拼接

  • 左右拼接
a  = np.floor(10*np.random.random((2,2)))
a  = np.floor(10*np.random.random((2,2)))
print('_______*________')
print(a)
print('_______*________')
print(b)
print(np.hstack((a,b)))

在这里插入图片描述

  • 上下拼接
a  = np.floor(10*np.random.random((2,2)))
a  = np.floor(10*np.random.random((2,2)))
print('_______*________')
print(a)
print('_______*________')
print(b)
print(np.vstack((a,b)))#纵着拼接

切分

  • np.hsplit(a,3)第一个参数表示要切分的对象,第二个参数表示要切分为几份,按行切分
  • np.vsplit(b,3)第一个参数表示要切分的对象,第二个参数表示要切分为几份,按列切分
a = np.array(np.random.random((2,12)))
print(a)
print(np.hsplit(a,3))#第一个参数表示要切分的对象,第二个参数表示要切分为几份,按行切分
b = np.array(np.random.random((12,2)))
print(b)
print(np.vsplit(b,3))#第一个参数表示要切分的对象,第二个参数表示要切分为几份,按列切分
发布了82 篇原创文章 · 获赞 26 · 访问量 3976

猜你喜欢

转载自blog.csdn.net/qq_40742223/article/details/105625831