Day 19 numpy模块\pandas模块\matplotlib模块

numpy模块\pandas模块\matplotlib模块

numpy模块

numpy库有两个作用:

  1. 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型
  2. 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似

创建矩阵

矩阵即numpy的ndarray对象,创建矩阵就是把一个列表传入np.array()方法。

import numpy as np

# 创建一维的ndarray对象
arr = np.array([1, 2, 3])

# 创建二维的ndarray对象
print(np.array([[1, 2, 3], [4, 5, 6]]))

# 创建三维的ndarray对象
print(np.array([[[ 2.10025514,  0.12015895,  0.61720311],
        [ 0.30017032, -0.35224985, -1.1425182 ],
        [-0.34934272, -0.20889423,  0.58662319]],

       [[ 0.83898341,  0.93110208,  0.28558733],
        [ 0.88514116, -0.75439794,  1.25286816],
        [ 0.51292982, -0.29809284,  0.48851815]],

       [[-0.07557171,  1.13162939,  1.51981682],
        [ 2.18557541, -1.39649634, -1.44411381],
        [-0.50446586,  0.16003707,  0.87616892]]]))

获取矩阵的行列数

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

# 获取矩阵的行和列构成的数组
print(arr.shape)

# 获取矩阵的行
print(arr.shape[0])

# 获取矩阵的列
print(arr.shape[1])

切割矩阵

切分矩阵类似于列表的切割,但是与列表的切割不同的是,矩阵的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 取所有元素
print(arr[:, :])

# 取第一行的所有元素
print(arr[:1, :])
print(arr[0,:])
print(arr[0, [0, 1, 2, 3]])

# 取第一列的所有元素
print(arr[:, :1])
print(arr[:,0])
print(arr[(0, 1, 2), 0])

# 取第一行第一列的元素
print(arr[0, 0])

# 取大于5的元素,返回一个数组
print(arr[arr > 5])

# 矩阵按运算符取元素的原理,即通过arr > 5生成一个布尔矩阵
print(arr > 5)

矩阵元素替换

矩阵元素的替换,类似于列表元素的替换,并且矩阵也是一个可变类型的数据,即如果对矩阵进行替换操作,会修改原矩阵的元素,所以下面我们用.copy()方法举例矩阵元素的替换。

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 取第一行的所有元素,并且让第一行的元素都为0
arr1 = arr.copy()
arr1[0, :] = 0

# 取所有大于5的元素,并且让大于5的元素为0
arr2 = arr.copy()
arr2[arr > 5] = 0

# 对矩阵清零
arr3 = arr.copy()
arr3[:, :] = 0

矩阵的合并

arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])

# 合并两个矩阵的行,注意使用hstack()方法合并矩阵,矩阵应该有相同的行,其中hstack的h表示horizontal水平的
print(np.hstack((arr1, arr2)))
# 合并两个矩阵,其中axis=1表示合并两个矩阵的行
print(np.concatenate((arr1, arr2), axis=1))

# 合并两个矩阵的列,注意使用vstack()方法合并矩阵,矩阵应该有相同的列,其中vstack的v表示vertical垂直的
print(np.vstack((arr1, arr2)))

# 合并两个矩阵,其中axis=0表示合并两个矩阵的列
print(np.concatenate((arr1, arr2), axis=0))

通过函数穿件矩阵

arange

# 构造0-9的ndarray数组
print(np.arange(10))

# 构造1-4的ndarray数组
print(np.arange(1, 5))

# 构造1-19且步长为2的ndarray数组
print(np.arange(1, 20, 2))

linspace/logspace

# 构造一个等差数列,取头也取尾,从0取到20,取5个数
print(np.linspace(0, 20, 5))

# 构造一个等比数列,从10**0取到10**20,取5个数
print(np.logspace(0, 20, 5))

zeros/ones/eye/empty

np.zeros((3,4))     #创造一个3*4的全0矩阵
np.ones((3,4))      #狗仔一个3*4的全1矩阵
np.eye(3)           #构造3个主元的单位矩阵
np.empty((4,4))     #构造一个4*4的随机矩阵,里面的元素是随机生成的

fromstring/fromfunction


# fromstring通过对字符串的字符编码所对应ASCII编码的位置,生成一个ndarray对象
s = 'abcdef'
# np.int8表示一个字符的字节数为8
print(np.fromstring(s, dtype=np.int8))

def func(i, j):
    """其中i为矩阵的行,j为矩阵的列"""
    return i*j

# 使用函数对矩阵元素的行和列的索引做处理,得到当前元素的值,索引从0开始,并构造一个3*4的矩阵
print(np.fromfunction(func, (3, 4)))

矩阵的运算

# 运算符:+ - * / % **n

arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])

arr1+arr2       #两个元素对应位置元素相加
arr**2          #arr1中对应元素位置取平方

矩阵的点乘

矩阵的点乘必须满足第一个矩阵的列数等于第二个矩阵的行数

arr1 = np.array([[1, 2, 3],  [4, 5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])

arr3=arr1.dot(arr2)

'''arr3是一个两行两列的矩阵,点乘就是把第一个矩阵的行乘以第二个元素的列,双方的元素一对一对应相乘并累加起来获得arr3对应的元素'''
#arr3[0,0]=arr1[0,0]*arr2[0,0]+arr1[1,0]*arr2[0,1]+arr1[2,0]*arr3[0,2]

矩阵的转置

矩阵的转置相当于矩阵的行和列互换

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

print(arr.transpose())
print(arr.T)

矩阵的逆

矩阵行和列相同时,矩阵才可逆

arr = np.array([[1, 2, 3],  [4, 5, 6], [7, 8, 9]])

np.linalg.inv(arr)      #矩阵的逆

#单位矩阵的逆就是单位矩阵本身
arr1=np.eye(3)
np.linalg.inv(arr1)

矩阵的其他操作

最大值最小值

arr = np.array([[1, 2, 3],  [4, 5, 6], [7, 8, 9]])

arr.max()           #获取所有元素最大值
arr.min()           #获取所有元素最小值
arr.max(axis=0)     #获取矩阵每一列的最大值 输出一个行
arr.max(axis=1)     #获取矩阵每一行的最大值 输出一个列
arr.argmax(axis=1)  #获取矩阵最大元素的索引位置

平均值

arr = np.array([[1, 2, 3],  [4, 5, 6], [7, 8, 9]])

arr.mean()          #获取矩阵所有元素的平均值
arr,mean(axis=0)    #获取矩阵每一列的平均值
arr.mean(axis=1)    #获取矩阵每一行的平均值

pandas模块

pandas是python数据分析的核心模块,他主要提供了五大功能

  1. 支持文件存取操作,支持数据库,html,json,pickle,csv.sas.stata.hdf等
  2. 支持增删改查、切片、高阶函数、分组聚合等单标操作,以及和字典列表的互相转换
  3. 支持多表拼接合并操作
  4. 支持简单的绘图操作
  5. 支持简单的统计分析操作

Series

只能处理一维的数组

import numpy as np
import pandas as pd

arr = np.array([1,2,3,4,np.nan,])
s=pd.Series(arr)

'''添加索引并且一维数组中的元素类型都变成float'''

DataFrame

猜你喜欢

转载自www.cnblogs.com/masterjian924/p/11020549.html