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 /矩阵相乘速度对比相关推荐

  1. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  2. Python之数据分析(Numpy的矩阵相关操作、ufunc泛化函数对象)

    文章目录 一.矩阵相关操作 二.ufunc统一泛化函数 一.矩阵相关操作 1.三种构造矩阵的方法 np.matrix(二维容器, copy=True) 一参为可被解释为矩阵的二维容器,比如二维数组.二 ...

  3. python科学计算之numpy+pandas+matplotlib+mysql

    简介 本文主要介绍了读取mysql中的数据,将其保存至numpy和pandas中,通过matplotlib进行可视化数据分析. 一.环境搭建 使用anaconda搭建科学计算环境,并安装相关软件包. ...

  4. 作业-python常用库类 numpy+pandas

    # -*- coding:utf-8 -*-# 1,一个四维的数组,以后两维度为单位,计算它们的和,比如一个1*2*3*4的数组,合并后两列,输出合并后的轴的sum# 实例,输入:[[[[2 7 9 ...

  5. Python使用扩展库numpy计算矩阵加权平均值

    本文介绍Python扩展库numpy的函数average()的用法. >>> import numpy as np # 创建二维矩阵 >>> x = np.matr ...

  6. Python实现机器学习二(实现多元线性回归)

    接着上一次的一元线性回归http://blog.csdn.net/lulei1217/article/details/49385531往下讲,这篇文章要讲解的多元线性回归. 1.什么是多元线性回归模型 ...

  7. Python 3.8+numpy查找矩阵中所有鞍点

    图书推荐: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,京东.当当.天猫均有销售. 图书封面: ...

  8. Python使用numpy计算矩阵特征值、特征向量与逆矩阵

    Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵. >>> impor ...

  9. Python+numpy实现矩阵QR分解

    感谢广东东软学院计算机系赵晨杰老师的交流. 如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解. Python扩展库numpy实现了矩 ...

最新文章

  1. if语句 power query_PowerQuery学习:认识M函数
  2. Android 程序 正确修改包名的方式(源代码)
  3. .NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它
  4. 班级日常分享:一天一瞬间!
  5. 10.2829(NOIP模拟修正总结)
  6. 一步一步写算法(之合并排序)
  7. 老不死的笔,德国神设计!陪伴一辈子!不用墨水的金属永恒笔!
  8. [SHELL]判断一个命令是否存在
  9. 局域网访问PHP项目网站 用IP地址进入
  10. YUV格式讲解并使用ffmpeg生产YUV文件
  11. acdsee 5.0简体中文免费下载【非常流行的看图工具】
  12. python 换行打印
  13. Java:基础 :集合和迭代器
  14. linux输入文件后clustalw,ClustalW----多序列比对分析(一)
  15. 银行月利率年利率转换算法说明和工具
  16. 课堂在线录屏:EV录屏软件配置设置
  17. 【coolshell酷壳】简明 Vim 练级攻略
  18. 【NLP】AutoRegressive Language Model
  19. http 请求的7 种方法
  20. 数据库优化,分表分库

热门文章

  1. LAMP网站架构简介
  2. 网络运维在经济危机中茁壮成长
  3. 幸福的源泉:Life is about choices 幸福可以选择
  4. python中 is 和== 的区别
  5. 设计模式(六)---- 策略模式
  6. 针对xml文件做提取与写入的操作
  7. [转载]Docker的安装配置及使用详解
  8. html5 乱码解决方案
  9. Android so减包相关
  10. .Net中的事件处理模型