机器学习_第一节_numpy
今天学了机器学习第一节, 希望能够坚持下去,其实不在乎课程是什么?关键要坚持下去
今天主要学了对矩阵的一些操作, 用的库是numpy
开始从头到尾捋一遍, 作者说的很有道理,学计算机,动手能力要强,所以以后尽量不要用pycharm,养成了不好的习惯
1.首先,第一个是导入库 import numpy
然后接下来我们创建一个矩阵: 用array方法
import numpy
vector = numpy.array([5, 10, 15, 20]) #一维矩阵
matrix = numpy.array([[5, 10, 15], [25, 30, 35], [40, 45, 50]]) #多维矩阵 注意中间的[]
print (matrix)
2.判断矩阵的类型 这里用的是shape方法
print(vector)
print(matrix.shape)
3.判断矩阵的类型 , 这里用的是dtype方法
vector.dtype
4.取值 这个是矩阵操作中比较重要的方法 有切片操作
4.1 取单一元素
matrix = numpy.array([[5, 10, 15], [25, 30, 35], [40, 45, 50]])
number = matrix[1,2] #打印结果是35 [ , ] 与C语言一样, 默认取值从0开始 , 所以取得是第1行第二列的元素
print(number)
4.2 去切片元素
vector = numpy.array([5, 10, 15, 20.0])
print(vector[0:3]) #这个与python一致, [ : ] 默认取得是一行的元素,所以结果是5 10 15
4.3 按列取值
matrix = numpy.array([
[5, 10, 15],
[25, 30, 35],
[40, 45, 50]])
print(matrix[:,1]) #这个是[ : , : ] 前面代表的是行, 后面代表的是列 所以这个取得是全部第二列的元素 ,结果是10 30 45
4.4
matrix = numpy.array([
[5, 10, 15],
[25, 30, 35],
[40, 45, 50]])
print(matrix[:,0:2]) #跟上面一致, 这个取得是 0, 1列的元素
4.5
matrix = numpy.array([
[5, 10, 15],
[25, 30, 35],
[40, 45, 50]])
print(matrix[1:3,0:2]) #这个就是取1,2行 0, 1列的元素, 结果是[25 30] [40 45]
5.判断一个矩阵是否有需要的值,返回还是一个矩阵,只是里面的值是bool类型
vector = numpy.array([5, 10, 15, 20.0])
vector == 10 #返回结果 array([False, True, False, False])
5.1通过返回的值, 可以找到元素的值 这个意义不大
vector = numpy.array([5, 10, 15, 20])
5.2 通过返回的值, 可以找到所在元素的列和行 这个很有意义
matrix = numpy.array([
[5, 10, 15],
[25, 30, 35],
[40, 45, 50]])
second_column_25 = (matrix[ : ,1] ==30)
print(second_column_25)
print(matrix[second_column_25, :])
6 and 和 or 操作
vector = numpy.array([5, 10, 15, 20])
equal_ten_five = (vector == 5) & (vector == 10)
print(equal_ten_five)
vector = numpy.array([5, 10, 15, 20])
equal_ten_five = (vector == 5) | (vector == 10)
print(equal_ten_five)
7 astype 转换方法 比如 将str类型 转换为 float类型 比较重要
vector = numpy.array(["1", "2", "3"])
print(vector.dtype)
print(vector)
vector = vector.astype(float)
print(vector.dtype)
print(vector)
8. sum方法 这个可以指定行和列相加得到新的矩阵
matrix = numpy.array([
[5, 10, 15],
[25, 30, 35],
[40, 45, 50]])
matrix.sum(axis = 1) #将列表的axis = 1 表示行相加, axis = 0表示列相加array([ 30, 90, 135])
9.这条包含的信息量比较大, 一是我们可以简写:numpy as np ,2. 可以创建一个列表arange ( ) 3.将列表转换成我们需要的行和列, 用reshape( , )方法
import numpy as np
print(np.arange(15))
a = np.arange(15).reshape(3,5)
10 看矩阵的维度, 实际应该+1 用 a.ndim
11看矩阵的元素的个数 a.size
12 创建一个全是0的矩阵 用zeros( ( , ))方法
b = np.zeros((3,4))
print(b)
13 创建一个全是1的矩阵 np.ones((2,3,4), dtype =np.int32)
14 创建一个列表, 从10 - 30 , 不包含30 并且每次叠加5, np.arange(10, 30, 5)
15 生成一个0-1的随机数列表 random.random((, )) np.random.random((2,3))
16 自动生成一个平均分的列表 从0-2*pi, 100个元素, 慢慢增加到2*pi
from numpy import pi
np.linspace(0, 2*pi, 100)
17矩阵的加减 矩阵的加减与数学上一致
a = np.array([20, 30, 40, 50])
b = np.arange(4)
print(a)
print(b)
c = a - b
print(c)
c = c - 1
print(c)
b ** 2
print(b **2)
print(a < 35)
18 矩阵的乘法 如果是* 直接元素与元素相乘, 实现数学上的方法需要.dot方法
A = np.array([[1,1],
[0,1]])
B = np.array([[2,0],
[3,4]])
print(A)
print("-------")
print(B)
print("-------")
print(A*B)
print("-------")
print(A.dot(B))
print("-------")
print(np.dot(A,B))
19 对元素开根号 或者 求e运算
B = np.arange(3)
print(B)
print(np.exp(B))
print(np.sqrt(B))
20. 重要的是将列表变成 向量 ravel 方法, 还有一个矩阵的转置 .T方法
a = np.floor(10*np.random.random((3,4)))
print(a)
print("----------------")
print(a.ravel())
print("----------------")
a.shape = (6,2)
print(a)
print("----------------")
print(a.T)
21 一个是取整方法floor(), 还有一个是矩阵的拼接, hstack是行拼接 vstack是列拼接
a = np.floor(10*np.random.random((2,2)))
b= np.floor(10*np.random.random((2,2)))
print(a)
print("---------")
print(b)
print("---------")
print(np.hstack((a,b)))
print("---------")
print(np.vstack((a,b)))
22 矩阵的切分, 主要是将矩阵按照列切分 vsplit( )和按照行切分 hsplit( ),
a = np.floor(10*np.random.random((2,12)))
print(a)
print("-------------")
print(np.hsplit(a,3))
print("-------------")
print(np.hsplit(a,(3,4)))
a = np.floor(10*np.random.random((12,2)))
print(a)
print("-------------")
print(np.vsplit(a,3))
23 矩阵的复制 有三种办法
23.1 第一种是 = , 两个矩阵共用内存地址, 改变一个, 另一个也改变
a = np.arange(12)
b = a
print(b is a)
b.shape = 3, 4
print(a.shape)
print(id(a))
print(id(b))
23.2 浅复制 第二种是.view( ), 两个矩阵不共用内存, 但是指向的值是一样的
c = a.view()
print(c is a)
c.shape = 2,6
print(a.shape)
c[0,4] = 1234
print(c)
print("--------------")
print(a)
23.3 指向不一样, 指向的值也不一样.copy()
d = a.copy()
print(d is a)
d[0,0] = 9999
print(d)
print(a)
24 寻找一个矩阵的各行最大值
data = np.sin(np.arange(20)).reshape(5, 4)
print(data)
ind = data.argmax(axis = 0)
print(ind)
data_max = data[ind, range(data.shape[1])] #不太理解, 但是照做就行 可以打印出来
print(data_max)
25扩充一个矩阵 .tile方法
a = np.arange(0, 40, 10)
print(a)
b = np.tile(a, (4,3))
print(b)
26 对一个矩阵每行每列进行排序
a = np.array([[4, 3, 5],
[1, 2, 1]])
print(a)
b = np.sort(a, axis = 1)
print(b)
a.sort(axis = 1)
print("---------")
print(a)
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
print("----------")
print(j)
print("----------")
print(a[j])
哈哈哈, 终于写完了, 这是今天所学的知识, 一定要坚持下去......洗洗睡吧
机器学习_第一节_numpy的更多相关文章
- android内部培训视频_第一节
声明:本视频为公司内部做android培训时录制的,无任何商业目的.同时鉴于水平有限,可能不符合您的需求,放在这里的目的是提供给公司同事下载,作为培训的一个记录,也作为一个系列教程的自我督促完成的理由 ...
- Vue快速学习_第一节
之前写CRM都是Django前后端一起写的,在大部分项目中实际上前后端是分离的,因此我们需要学习一个前端框架来进行前端页面的编写,这里选择了Vue进行学习,好了开始学习吧. 1.ES6部分知识点学习 ...
- 第二篇:呈现内容_第一节:Control呈现
一.Control的呈现过程 在上个章节““生死有序”的控件生命周期”中,我们提到Render是控件开发的主角,但在控件树的“合成模式(Composite)”部分这位主角却缺席了(戏份太多的缘由).哦 ...
- 第一篇:初识ASP.NET控件开发_第一节:控件类及其继承关系
1)System.Web.UI.Control(以下简称Control) Control 类是包括自定义控件.用户控件和页在内的所有 ASP.NET 服务器控件的基类..定义由所有 ASP.NET 服 ...
- 第一节,TensorFlow基本用法
一 TensorFlow安装 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tsnsor(张量)意味着N维数组,Flow(流)意味着基 ...
- 第一节:.Net版基于WebSocket的聊天室样例
一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比 ...
- 我的第一节Android课
我的第一节安卓课程,今天非比寻常的一天,我开始了我程序猿之路的第一节安卓课程,安卓课程只是我的一个兴趣班,我的本专业是java开发,因为喜欢做一个属于自己的一个手机APP,就选多个一样技能,毕竟十八般 ...
- 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
- Centos7 Openstack - (第一节)基本环境配置
Centos7 install Openstack - (第一节)基本环境配置 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack官方文档配置 官方文 ...
随机推荐
- MongoDB 分片管理(三)服务器管理
MongoDB 分片管理(三)服务器管理
- Oracle 修改SID --不建议修改
1.登录数据库查看SID select instance_name,status from v$instance; 2.关闭数据库 shutdown immdiate; 3.修改/etc/oratab ...
- git .gitignore 有时不起作用的问题
有时候,.gitignore 会对部分文件 / 文件夹失效,大概原因是由于新创建的文件已经出现在 git 本地仓库的缓存,所以.gitignore 就失效了 解决办法就是清空一下 git 仓库的缓存, ...
- windows使用强大的wget工具
原文链接:https://www.cnblogs.com/hzdx/p/6432161.html wget下载地址:http://www.interlog.com/~tcharron/wgetwin. ...
- zabbix (11) 监控TCP连接数
对TCP的监控可以采用ss.netstat./proc/net/tcp这三个不同的方案来实现.其中ss是最快的 (1)ss命令 [root@manager1 script_py ::]#time ss ...
- mysql的select语句
参考: https://www.cnblogs.com/xiaoshen666/p/10824117.html https://www.cnblogs.com/zouwangblog/archive/ ...
- エンジニア死滅シタ世界之荒れ果てたショップ [MISSION LEVEL: C] -Python3答案
题目 题目要求输入三个数字,半角空格间隔开.格式N A B 条件 ・1 ≦ N ≦ 9 ・0 ≦ A ≦ B ≦ 5000 ・(B的位数) ≦ N 输出A到B包括AB之间的所有数,如果数字的位数不够N ...
- Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)
双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长 ...
- Keil综合(03)_map文件全解析[转]
推荐分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:ht ...
- 18Flutter中的路由、路由替换、返回到根路由:
路由: 正常跳转: Navigator.pushNamed(context,'/product'); 路由替换: Navigator.pushReplacementNamed(context, ' ...