numpy的基础运算2-【老鱼学numpy】】的更多相关文章

numpy的基础运算中还有很多运算,我们这里再记录一些. 最小/大值索引 前面一篇博文中我们讲述过如何获得数组中的最小值,这里我们获得最小/大值的索引值,也就是这个最小/大值在整个数组中位于第几位. import numpy as np a = np.array([[10, 30, 15], [20, 5, 25]]) print("a=") print(a) print("最小值索引:", a.argmin()) print("最大值索引:",…
概述 本节主要讲解numpy数组的加减乘除四则运算. np.array()返回的是numpy的数组,官方称为:ndarray,也就是N维数组对象(矩阵),N-dimensional array object. 这个对象的特性跟矩阵的特性也比较接近,因此我这里有时就将其混称为数组/矩阵了. 数组加法 例如: import numpy as np a = np.array([10, 20, 30, 40]) print("a:", a) b = np.arange(4) print(&qu…
老鱼为了跟上时代潮流,也开始入门人工智能.机器学习了,瞬时觉得自己有点高大上了:). 从机器学习的实用系列出发,我们会以numpy => pandas => scikit-learn => tensorflow => keras 的学习系列过程,这也是老鱼设定的学习步骤,有兴趣的同学可以跟着老鱼的脚步一点一点往前走,共同进步! 这是我的第一篇关于numpy的学习,我会把我学习的过程记录在这里. 言归正传,学个人工智能和机器学习,为何要学什么numpy啊? 因为numpy是Pytho…
概述 本节主要讲述如何把两个数组按照行或列进行合并. 按行进行上下合并 例如: import numpy as np a = np.array([1, 1, 1]) b = np.array([2, 2, 2]) print(np.vstack((a, b))) 合并后输出结果为: [[1 1 1] [2 2 2]] 按列左右合并 import numpy as np a = np.array([1, 1, 1]) b = np.array([2, 2, 2]) print(np.hstack(…
对象的引用 看例子: a = np.array([0, 1, 2, 3]) b = a a[0] = 5 print("b=", b) # 判断a和b是否是同样的地址 print(b is a) 运行结果: b= [5 1 2 3] True 上面的例子中,我们改变了a的值,但打印出来b中的值也被修改了,原因是a和b指向相同的对象. 复制 如果我们想要解决修改了a的值不会影响到b中的值,该如何做到呢? import numpy as np a = np.array([0, 1, 2,…
目的 本节我们将介绍如何搭建python的开发环境以及numpy的基本属性,这样可以检验我们的numpy是否安装正确了. python开发环境的搭建 工欲善其事必先利其器,我用得比较顺手的是IntelliJ IDEA的开发环境,这次我也用IDEA的python开发环境来进行开发. 我使用IntelliJ IDEA添加python插件方式进行开发,主要原因是因为我还用它来开发JAVA,因此只要在其中下载python插件就可以. 具体安装插件方式就不细讲了,只放一张截图,大家应该看得明白. 有的同学…
要玩numpy,就得要安装numpy. 安装python 3.6.3 64位 首先需要安装python,安装python的具体方法这里就不细讲了. 可以到官网上下载相应的python版本就可以了,目前我这里安装的是最新版python 3.6.3,64位的.这里需要注意的是python多少位的,好像后面在安装其它模块时就需要注意对应的位数. 如何查看自己电脑是多少位数的? 只要右键我的电脑显示其属性就可以,其中会有信息告诉你的操作系统是32位还是64位.现在的电脑一般都是64位操作系统的. 当然,…
在上一篇文章中,我们已经看到了如何通过numpy创建numpy中的数组,这里再重复一下: import numpy as np # 数组 a = [[1, 2, 3], [4, 5, 6]] print("a:", a) # 矩阵 b = np.array(a) print("b:", b) 执行后输出为: a: [[1, 2, 3], [4, 5, 6]] b: [[1 2 3] [4 5 6]] 我们可以看到python中的数组和numpy中的数组在屏幕上输出的…
简单的索引值 import numpy as np a = np.arange(3, 15).reshape(3, 4) print("a=") print(a) print("第2行的数据:", a[2]) print("第2行第3列的数据:", a[2][3]) 输出为: a= [[ 3 4 5 6] [ 7 8 9 10] [11 12 13 14]] 第2行的数据: [11 12 13 14] 第2行第3列的数据: 14 对于获取第2行第…
有合并,就有分割. 本节主要讲述如何通过numpy对数组进行横向/纵向分割. 横向/纵向分割数组 首先创建一个6行4列的数组,然后我们对此数组按照横向进行切割,分成3块,这样每块应该有2行,见例子: import numpy as np a = np.arange(24).reshape(6, 4) print("a=") print(a) print(np.split(a, 3, axis=0)) 输出为: a= [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]…
前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我们这次使用CNN卷积神经网络来进行识别. 卷积神经网络我的理解是部分模仿了人眼的功能. 我们在看一个图像时不是一个像素点一个像素点去分辨的,我们的眼睛天然地具有大局观,我们看到某个图像时自动地会把其中的细节部分给聚合起来进行识别,相反,如果我们用个放大镜看到其中的各个像素点时反而不知道这是啥东西了.…
前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=512) 这里在训练时增加了一个参数batch_size,使用 512 个样本组成的小批量,将模型训练 20 个轮次. 这个参数可以看成是在训练时不一次性在全部的训练集上进行,而是针对其中的512个题目分批次进行训练.有点类似做512道题目进行训练,然后看结果进行调整,而不是一次性做好25000道题目然…
这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地学习一下关于matplotlib的功能. matlab由于其拥有强大的显示图表功能而出名: 在python中,就提供了一个类似matlab软件中的画图库matplotlib,其基本上是模仿matlab中的画图函数. 官网中介绍的显示图表的例子见:http://matplotlib.org/gallery/index.html 要使用,就必须先进行安装,安…
之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时间轴上慢慢展开,有点类似我们大脑认识事物时会有相关的短期记忆. 这次我们使用RNN来识别手写数字. 首先导入数据并定义各种RNN的参数: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat…
等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中. 因为等高线的图有三个信息:x, y以及x,y所对应的高度值. 这个高度值的计算我们用一个函数来表述: # 计算x,y坐标对应的高度值 def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 这个函数看起来挺复杂的,但我们这里只是为了能够获得一个高度值,因此其中函数代表什么意义不用关心,只要知道输入一个x,y,输出一个高度值就可以了. 要画出…
过拟合 过拟合相当于一个人只会读书,却不知如何利用知识进行变通. 相当于他把考试题目背得滚瓜烂熟,但一旦环境稍微有些变化,就死得很惨. 从图形上看,类似下图的最右图: 从数学公式上来看,这个曲线应该是阶数太高的函数,因为一般任意的曲线都能由高阶函数来拟合,它拟合得太好了,因此丧失了泛化的能力. 用Learning curve 检视过拟合 首先加载digits数据集,其包含的是手写体的数字,从0到9: # 加载数据 digits = load_digits() X = digits.data y…
前面我们学习了numpy,现在我们来学习一下pandas. Python Data Analysis Library 或 pandas 主要用于处理类似excel一样的数据格式,其中有表头.数据序列号以及实际的数据,而numpy就仅仅包含了实际的数据. 安装 直接输入: pip3 install pandas 最基本用法 import pandas as pd s = pd.Series([1, 2, 5, 6]) print(s) 输出: 0 1 1 2 2 5 3 6 dtype: int6…
选择列 根据列名来选择某列的数据 import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"]) print(&quo…
当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: import tensorflow as tf # 保存到文件 W = tf.Variable([[1, 2, 3], [3, 4, 5]], dtype=tf.float32, name='weights') b = tf.Variable([[1, 2, 3]], dtype=tf.float32,…
前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf.summary.histogram(layer_name + "/weights", Weights) 这里用tf.summary.histogram函数来显示二维数据在不同网络层的变化情况,其中第一个参数是名字,可以用/来进行分层显示,第二个参数就是相应变量的值. scalar tf.…
tensorflow自带了可视化的工具:Tensorboard.有了这个可视化工具,可以让我们在调整各项参数时有了可视化的依据. 本次我们先用Tensorboard来可视化Tensorflow的结构. 在输出tensorflow结构的关键步骤是: writer = tf.summary.FileWriter("E:/todel/data/tensorflow", sess.graph) 这个函数中把当前的tensorflow的结构图输出到指定的目录下. 而为了能够使输出的结构能够有一定…
本节主要讲述如何根据上篇博客中选择出相应的数据之后,对其中的数据进行修改. 对某个值进行修改 例如,我们想对数据集中第2行第2列的数据进行修改: import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A",…
假设我们的数据集中有缺失值,该如何进行处理呢? 丢弃缺失值的行或列 首先我们定义了数据集的缺失值: import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C&…
pandas可以读写如下格式的数据类型: 具体详见:http://pandas.pydata.org/pandas-docs/version/0.20/io.html 读取csv文件 我们准备了一个csv文件,格式类似为: 要读取此csv文件,方法为: import pandas as pd import numpy as np data = pd.read_csv("D:\\data\\location.csv", encoding="GB2312") print…
有两个数据集,我们想把他们的结果根据相同的列名或索引号之类的进行合并,有点类似SQL中的从两个表中选择出不同的记录并进行合并返回. 合并 首先准备数据: import pandas as pd import numpy as np data0 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd']) data1 = pd.DataFrame(np.ones((3, 4))*1, columns=['a', 'b', 'c',…
本节讲述对于两个数据集按照相同列的值进行合并. 首先定义原始数据: import pandas as pd import numpy as np data0 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'] }) data1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'C'…
本节主要讲述如何把pandas中的数据用图表的方式显示在屏幕上,有点类似在excel中显示图表. 安装matplotlib 为了能够显示图表,首先需要安装matplotlib库,安装方法如下: pip3 install matplotlib 显示图表 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 产生1000个随机数 data = pd.Series(np.random.rand(1000)) #…
本文介绍一下matplotlib的最基本用法. 这次我们要显示一个线性方程的直线. 首先要引入matplotlib库,一般是用plt这个简写的,我们就按照大多数人的惯例来进行命名: import matplotlib.pyplot as plt 下面我们用numpy生成x轴上的数据:从-1到1,总共有50个点: x = np.linspace(-1, 1, 50) 再定义一个线性方程: y = 2 * x + 1 接着把x和y在坐标轴上显示出来,并连点成线: plt.plot(x, y) 最后,…
如果我们想要显示多个图像,有点类似多窗口显示图像这个概念,则就会用到plt.figure() 直接上例子: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-1到1,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 画图1 plt.figure() plt.p…
我们可以对坐标轴进行设置,设置坐标轴的范围,设置坐标轴上的文字描述等. 基本用法 例如: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-1到1,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 设置x轴的取值范围为:-1到2 plt.xlim(-1, 2)…