python与机器学习(二)Numpy / Pandas /矩阵相乘速度对比
NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy的官方文档:https://numpy.org/doc/stable/reference/index.html
Pandas是一个强大的分析结构化数据的工具集,它的使用基础是NumPy(提供高性能的矩阵运算),用于数据挖掘和数据分析,同时也提供数据清洗功能。
Pandas的官方文档:https://pandas.pydata.org/docs/
实验 1 NumPy数组基本操作
用NumPy生成长度为20的全1一维数组(向量) a ,然后将其变形为4×5的二维数组(矩阵)形式
提示:使用np.ones、reshape()函数
a = None
a = np.ones(20)
print("a:\n",a)
b = a.reshape((4,5),order = 'A')
print("b:\n",b)
运行结果如下:
a:[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
b:[[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]]
用NumPy随机生成数值呈正态分布的5×6二维数组(矩阵) b ;然后将数值小于0的元素变为0,数值不小于0的元素变为1
提示:使用np.random.randn函数
b = None
b = np.random.randn(5,6) #随机生成数值呈正态分布的5×6二维数组(矩阵)bprint("b:\n",b) #打印for i in range(len(b)): #改变元素的值for j in range(len(b[0])):if(b[i][j] >= 0):b[i][j] = 1else:b[i][j] = 0print("b:\n",b) #打印改变过的二维矩阵
运行结果如下:
b:[[ 0.42750409 0.24876996 1.20965927 -0.27640069 1.62989209 -2.876562 ][-0.54868323 -0.83376206 -1.78829935 1.09605845 -0.01247058 0.07712765][-0.51337788 -1.23734978 -0.79213691 -0.53300128 1.06409793 0.39170247][-1.17350612 0.26889677 1.18307913 0.93361501 0.82088702 -0.35686145][ 0.29695482 0.22552731 -0.24845305 1.67563496 -1.42120198 -1.25502105]]
b:[[1. 1. 1. 0. 1. 0.][0. 0. 0. 1. 0. 1.][0. 0. 0. 0. 1. 1.][0. 1. 1. 1. 1. 0.][1. 1. 0. 1. 0. 0.]]
实验 2 矩阵相乘速度对比
分别随机生成大小为100×1000的矩阵 A 和大小为1000×200的矩阵 B
提示:使用np.random.rand或np.random.randn函数
生成两个矩阵
A = None
A = np.random.randn(100,1000)
B = None
B = np.random.randn(1000,200)
使用NumPy的矩阵相乘函数计算结果 C=A×B
提示:使用np.dot函数
time1 = time.time()C = None
C = np.dot(A,B)
time2 = time.time()
print('{:.3f}ms'.format((time2-time1)*1000))
运行结果如下:
43.548ms
使用3重for循环模拟矩阵相乘计算结果 D=A×B
time1 = time.time()D = np.zeros((A.shape[0], B.shape[1]))
for i in range(A.shape[0]):for j in range(B.shape[1]):for k in range(A.shape[1]):D[i][j] += A[i][k] * B[k][j] time2 = time.time()
print('{:.3f}ms'.format((time2-time1)*1000))
运行结果如下:
17595.771ms
验证一下这两种方法做出的结果是否一致
print(abs(D-C))
运行结果如下:
[[2.13162821e-14 2.84217094e-14 7.10542736e-15 ... 1.77635684e-142.75335310e-14 5.32907052e-15][0.00000000e+00 7.81597009e-14 8.88178420e-15 ... 1.42108547e-143.19744231e-14 0.00000000e+00][2.48689958e-14 3.10862447e-14 7.32747196e-15 ... 3.55271368e-142.13162821e-14 7.10542736e-15]...[2.13162821e-14 1.15463195e-14 7.10542736e-15 ... 7.81597009e-145.68434189e-14 4.97379915e-14][3.90798505e-14 1.42108547e-14 7.10542736e-15 ... 4.97379915e-142.13162821e-14 4.97379915e-14][0.00000000e+00 8.88178420e-15 1.06581410e-14 ... 1.15463195e-141.24344979e-14 1.06581410e-14]]
注意到这里的误差已经足够小。
实验 3 Pandas基本操作
使用Pandas读取data.csv文件,输出数据的维度,查看数据的前10行(注意列名不能为原数据)
提示:使用pd.read_csv、shape、head函数
import pandas as pd
data = None
CSV_FILE_PATH = 'data.csv'
csv_data = pd.read_csv(CSV_FILE_PATH,header=None)
print(csv_data.shape,"\n\n\n")
print(csv_data.head(10))
运行结果如下:
(100, 5) 0 1 2 3 4
0 0.751467 0.536850 0.088547 0.717778 1
1 0.174956 0.853711 0.825316 0.249155 0
2 0.536223 0.835790 0.540562 0.246308 1
3 0.836582 0.124468 0.039970 0.693927 1
4 0.686294 0.636168 0.542874 0.019389 1
5 0.070402 0.907882 0.891519 0.645994 1
6 0.497347 0.373515 0.707714 0.155490 1
7 0.322959 0.285857 0.394315 0.282622 0
8 0.061755 0.279301 0.270008 0.149885 0
9 0.587104 0.645545 0.608420 0.174640 0
其中"data.csv"数据如下所示:
分离出数据的标签列(最后一列)
label = None
last_list = csv_data.iloc[:,-1]
print(last_list)
运行结果如下:
0 1
1 0
2 1
3 1
4 1
5 1
6 1
7 0
8 0
9 0
10 1
11 0
12 1
13 1
14 1
15 0
16 0
17 1
18 1
19 1
20 1
21 0
22 0
23 0
24 0
25 1
26 1
27 1
28 1
29 1..
70 1
71 1
72 1
73 0
74 0
75 1
76 0
77 0
78 0
79 0
80 1
81 0
82 1
83 0
84 1
85 1
86 0
87 1
88 1
89 0
90 1
91 1
92 0
93 1
94 0
95 1
96 1
97 1
98 1
99 1
Name: 4, Length: 100, dtype: int64
统计数据为0的数量
num = 0
for i in range(0,99,1):if last_list[i] == 0:num = num + 1
print("the number of 0 is:",num)
运行结果如下:
the number of 0 is: 40
python与机器学习(二)Numpy / Pandas /矩阵相乘速度对比相关推荐
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- Python之数据分析(Numpy的矩阵相关操作、ufunc泛化函数对象)
文章目录 一.矩阵相关操作 二.ufunc统一泛化函数 一.矩阵相关操作 1.三种构造矩阵的方法 np.matrix(二维容器, copy=True) 一参为可被解释为矩阵的二维容器,比如二维数组.二 ...
- python科学计算之numpy+pandas+matplotlib+mysql
简介 本文主要介绍了读取mysql中的数据,将其保存至numpy和pandas中,通过matplotlib进行可视化数据分析. 一.环境搭建 使用anaconda搭建科学计算环境,并安装相关软件包. ...
- 作业-python常用库类 numpy+pandas
# -*- coding:utf-8 -*-# 1,一个四维的数组,以后两维度为单位,计算它们的和,比如一个1*2*3*4的数组,合并后两列,输出合并后的轴的sum# 实例,输入:[[[[2 7 9 ...
- Python使用扩展库numpy计算矩阵加权平均值
本文介绍Python扩展库numpy的函数average()的用法. >>> import numpy as np # 创建二维矩阵 >>> x = np.matr ...
- Python实现机器学习二(实现多元线性回归)
接着上一次的一元线性回归http://blog.csdn.net/lulei1217/article/details/49385531往下讲,这篇文章要讲解的多元线性回归. 1.什么是多元线性回归模型 ...
- Python 3.8+numpy查找矩阵中所有鞍点
图书推荐: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,京东.当当.天猫均有销售. 图书封面: ...
- Python使用numpy计算矩阵特征值、特征向量与逆矩阵
Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵. >>> impor ...
- Python+numpy实现矩阵QR分解
感谢广东东软学院计算机系赵晨杰老师的交流. 如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解. Python扩展库numpy实现了矩 ...
最新文章
- if语句 power query_PowerQuery学习:认识M函数
- Android 程序 正确修改包名的方式(源代码)
- .NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它
- 班级日常分享:一天一瞬间!
- 10.2829(NOIP模拟修正总结)
- 一步一步写算法(之合并排序)
- 老不死的笔,德国神设计!陪伴一辈子!不用墨水的金属永恒笔!
- [SHELL]判断一个命令是否存在
- 局域网访问PHP项目网站 用IP地址进入
- YUV格式讲解并使用ffmpeg生产YUV文件
- acdsee 5.0简体中文免费下载【非常流行的看图工具】
- python 换行打印
- Java:基础 :集合和迭代器
- linux输入文件后clustalw,ClustalW----多序列比对分析(一)
- 银行月利率年利率转换算法说明和工具
- 课堂在线录屏:EV录屏软件配置设置
- 【coolshell酷壳】简明 Vim 练级攻略
- 【NLP】AutoRegressive Language Model
- http 请求的7 种方法
- 数据库优化,分表分库