基于python的理论与实践

基于python的理论与实践(前两章)

chapter1

# NumPy 计算数值的库 数组和矩阵
# MatplotLib 画图的库
# 使用Anaconda来安装python3,因为anaconda集成了很多库
# 查看python版本命令:python --version
# 对话模式: python

'''
1.数据类型:整型、布尔型、字符串型,用type()来查看数据的类型,bool的运算符有and or not,字符串拼接可以用“+”
2.python3中的整数/整数得到的是浮点数
3.变量 variable,用变量进行计算或赋值
4.python属于动态类型语言的编程语言,所谓动态就是变量的类型根据情况自己决定的
5.列表:list 中有slicing,list[-1]是最后一个元素,list[:-1]到倒数第二个元素
6.词典dict 集合set 元组tuple
7.各种数据类型的操作
'''

'''
1. if语句 if else
2. for语句 for in
3. 函数 def 函数名(参数)
4. python脚本文件,即将程序保存在文件中,集中运行这个文件, 使用命令:python 文件名
5. 类:定义新的数据类型,实例变量是存储在各个实例中的变量
    class 类型:
        def __init__(self,para): # 构造函数constructor
            xxx
        def functionname(self, para):
            xxx

'''

'''
1. numpy:生成数组的代码:np.array([[],[]])
2. 数组之间的运算需要两个数组的元素个数一致,乘法就是element-wise product
3. 数组可以和单一的数值进行计算,即标量
4. numpy也可以生成多维的数组,查看元素的类型.dtype,查看矩阵形状:.shape,矩阵的算术运算也可以在相同形状的矩阵之间以对应元素的方式进行
5. 一维数组是向量,二维数组是矩阵,三维及以上是张量或多维数组,广播是指不同形状的数组之间也可以进行计算.
6. 创建数组的方式: np.zeros([2,2], dtype=int),2*2维的数组,元素是int类型 ,np.ones([3,5], dtype=int),b.flatten()转成一维数组,np.arange(10,30,5, dtype=int) 每间隔5个取值

'''

'''
1. matplotlib:import matplotlib.pyplot as plt
2. matplotlib:用于读入图片的命令 from matplot.image import imread
3. vscode不知道为什么不能显示图片,只能save之后才看到
'''
# coding: utf-8
import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import imread
import matplotlib

'''
# 生成数据
x = np.arange(0, 6, 0.1)
y1 = np.cos(x)
y2 = np.sin(x)
 
# 绘制图形
plt.plot(x, y1, label="cos")
plt.plot(x, y2, linestyle="--", label="sin")
plt.xlabel("x")
plt.ylabel("y")
plt.title("cos & sin")
plt.legend() # 使文字说明,图例出现
plt.show()
plt.savefig("firstone.jpg")

'''
os.system('export DISPLAY=:0.0')
matplotlib.use('Agg')
img = imread("firstone.jpg")
plt.imshow(img)
plt.show()

chapter2

'''
感知机 perceptron 是一种算法 Frank Rosenblatt在1957年提出来的,是deep learning 起源的算法
感知机可以接收多个信号,输出一个信号,这里的信号是类似电流或河流具备流动性的东西。和实际的流不同,感知机的信号只有流和不流两个取值(1/0)
每个神经元用于计算传过来的信号,如果信号大于某个阈值神经元就被激活了,每个信号都有各自的权重,例如图perception.jpg
简单逻辑电路:与门,与非门,或门,
感知机的局限是不能实现异或门,单纯的直线不能将四个点(0,1)(1,0)和(0,0)(1,1)分开;它的局限在于它只能表示由一条直线分割的空间
由曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间
叠加层可以实现异或,异或门是一种多层结构的神经网络

'''

# -*-coding:utf-8-*-
import encodings
import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import imread
from matplotlib.patches import Circle

def get_perceptron():
    a = [[5,8], [5,8]]
    b = [[3,7], [10,8]]
    ti = np.arange(0, 15+1)
    fig, ax = plt.subplots() # 返回一个包含figure和axes对象的元组
    plt.xlim(0,15)# 设定绘制范围
    plt.ylim(0,15)
    plt.xticks(ti) # 设置刻度
    plt.yticks(ti)
    plt.text(3,3, "x1") # 在某个坐标写文字
    plt.text(10,8, "y")
    plt.text(3,10, "x2")
    plt.text(7,5, "w1")
    plt.text(7,10, "w2")
    draw_circle1 = plt.Circle((3,3), 2) # 画圆 圆心坐标和半径
    draw_circle2 = plt.Circle((10,8), 2) # 画圆 圆心坐标和半径
    draw_circle3 = plt.Circle((3,10), 2) # 画圆 圆心坐标和半径
    ax.set_aspect(1) # x y 等比例
    ax.add_artist(draw_circle1)
    ax.add_artist(draw_circle2)
    ax.add_artist(draw_circle3)
    ax.annotate('', xy=(8,7), xytext=(5,3), arrowprops=dict(arrowstyle="->", color="r", hatch='*',))
    ax.annotate('', xy=(8,8), xytext=(5,10), arrowprops=dict(arrowstyle="->", color="r", hatch='*',))

    # for i in range(len(a)): 
    #     ax.plot(a[i], b[i], color='r')
        # ax.scatter(a[i], b[i], color='b')
    plt.title("Perceptron")
    plt.show()
    plt.savefig("perceptron.jpg")

def get_andgate(x1, x2):
    # 与门
    print("与门:")
    w1, w2, theta = 0.5, 0.5, 0.7
    temp = x1*w1 + x2*w2
    if temp <= theta:
        return 0
    else:
        return 1

def get_NANDgate(x1, x2):
    # 与非门
    print("与非门:")
    w1, w2, theta = -0.5, -0.5, -0.7
    temp = x1*w1 + x2*w2
    if temp <= theta:
        return 0
    else:
        return 1

def get_ORgate(x1, x2):
    # 或门
    print("或门:")
    w1, w2, theta = 0.5, 0.5, 0.3
    temp = x1*w1 + x2*w2
    if temp <= theta:
        return 0
    else:
        return 1

def get_Andgate2(x):
    w = np.array([0.5, 0.5])
    b = -0.7
    temp = np.sum(w*x)+b
    if temp <= 0 :
        return 0
    else:
        return 1

def get_NAndgate2(x):
    w = np.array([-0.5, -0.5])
    b = 0.7
    temp = np.sum(w*x)+b
    if temp <= 0 :
        return 0
    else:
        return 1

def get_Orgate2(x):
    w = np.array([0.5, 0.5])
    b = -0.3
    temp = np.sum(w*x)+b
    if temp <= 0 :
        return 0
    else:
        return 1

def XOR(x):
    s1 = get_NAndgate2(x)
    s2 = get_Orgate2(x)
    return get_andgate(s1, s2)

if __name__ == "__main__":
    # 画感知机图
    # get_perceptron()
    
    # 实现 与、与非、或门
    temp = [[0,0],[0,1],[1,0],[1,1]]

    # for t in temp:
    #     print(get_andgate(t[0],t[1]))
    #     print(get_NANDgate(t[0],t[1]))
    #     print(get_ORgate(t[0],t[1]))

    # 实现与、与非、或门 version2,将阈值改称为偏置
    x = np.array([[0,0], [0,1], [1,0], [1,1]])
    for t in x:
        # print(get_Andgate2(t))
        # print(get_NAndgate2(t))
        # print(get_Orgate2(t))
        print(XOR(t))


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340