耀世-耀世娱乐咨询法律事务所
service tel

400-123-4567
+86-123-4567

站内公告: 诚信为本:市场永远在变,诚信永远不变。

400-123-4567

+86-123-4567
13800000000

广东省广州市天河区88号

当前位置: 首页 > 耀世登录 > 案例分类一

动物识别专家系统(C++版)

时间:2025-02-15 10:43:09

 

--------------------- 本文来自 Robin_just 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/shaguabufadai/article/details/71699372?utm_source=copy

知识库

在本系统当中,知识库中的知识用产生式规则来表示,共有如下15条规则。
R1 IF该动物有奶THEN该动物是哺乳动物
R2 IF该动物有毛发THEN该动物是哺乳动物
R3 IF该动物有羽毛THEN该动物是鸟
R4 IF该动物会飞AND会下蛋THEN该动物是鸟
R5 IF该动物有爪AND有犬齿AND眼盯前方THEN该动物是食肉动物
R6 IF该动物吃肉THEN该动物是肉食动物
R7 IF该动物是哺乳动物AND有蹄THEN该动物是有蹄类动物
R8 IF该动物是哺乳动物AND嚼反刍THEN该动物是有蹄类动物
R9 IF 该动物是哺乳动物 AND 该动物是食肉动物 AND 是黄褐色 AND身上有黑色条纹 THEN 该动物是虎
R10 IF该动物是哺乳动物 AND 该动物是食肉动物AND是黄褐色AND身上有暗斑点THEN该动物是金钱豹
R11 IF该动物是有蹄类动物AND有长脖子AND有长腿AND身上有暗斑点THEN该动物是长颈鹿
R12 IF该动物是有蹄类动物AND身上有黑色条纹THEN该动物是斑马
R13 IF该动物是鸟AND有不会飞AND有长腿AND长脖子AND是黑白二色THEN该动物是鸵鸟
R14 IF该动物是鸟AND不会飞AND会游泳AND是黑白二色THEN该动物是企鹅
R15 IF该动物是鸟AND善飞THEN该动物是信天翁

 

动物识别专家系统(C++版)_动物识别专家系统

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

1,web打包出的后缀名是war,一般不提供给外部使用;

2,在创建或者导入一个Maven项目时,需要设置自动导入包;(idea中是file-> setting -> Maven)

3,在Maven的web项目中,是没有写java的文件夹的,因此需要手动创建;

4,Maven的生命周期重要的有四个:

  • install:打包并且把该包放在Maven本地仓库
  • compile:把jmain文件夹ava文件编译成.class文件
  • test:把main文件夹中的java文件和test包中的java文件打包成.class文件
  • clear:清除.class文件

5,Maven中的坐标(GAV)

  • groupId:组织标示(包名)
  • artifactId:项目名称
  • version:项目的当前版本

6,工程间关系

父子工程

  • 父项目选择站点项目
  • 父项目管理子项目的jar包
  • 删除src,不需要使用
  • 有页面的地方创建web项目

项目间调用

  • 导入相应的引用即可

多项目方式:

  • 创建一个空的工程
  • 创建模块项目(先new的是module)

7,搭建私服服务器软件:nexus

?

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

固态硬盘()的存储介质分为两种,一种是采用闪存()作为存储介质,另外一种是采用作为存储介质。

基于闪存的固态硬盘():采用FLASH芯片作为存储介质,这也是我们通常所说的。它的外观可以被制作成多种模样,例如:笔记本硬盘、微硬盘、存储卡、优盘等样式。这种固态硬盘最大的优点就是可以移动,而且数据保护不受电源控制,能适应于各种环境,但是使用年限不高,适合于个人用户使用。在基于闪存的固态硬盘中,存储单元又分为两类:和。

的特点是成本高、容量小、但是速度快,而的特点是容量大成本低,但是速度慢。的每个单元是2bit的,相对来说整整多了一倍。不过,由于每个存储单元中存放的资料较多,结构相对复杂,出错的几率会增加,必须进行错误修正,这个动作导致其性能大幅落后于结构简单的闪存。此外,闪存的优点是复写次数高达100000次,比闪存高=1=0==倍。此外,为了保证的寿命,控制芯片都校验和智能磨损平衡技术算法,使得每个存储单元的写入次数可以平均分摊,达到100万小时故障间隔时间()。

基于的固态硬盘:采用作为存储介质,目前应用范围较窄。它仿效传统硬盘的设计、可被绝大部分操作系统的文件系统工具进行卷设置和管理,并提供工业标准的和接口用于连接主机或者服务器。应用方式可分为和两种。它是一种高性能的存储器,而且使用寿命很长,美中不足的是需要独立电源来保护数据安全。

1、启动快,没有电机加速旋转的过程;
2、不用磁头,快速随机读取,读延迟极小;
3、相对固定的读取速度,由于寻址时间与数据存储位置无关,因此磁盘碎片不会影响读取时间;
4、写入速度快(基于DRAM),硬盘的I/O操作性能佳,能够明显提高需要频繁读写的系统的性能;
5、无噪音;
6、低容量的基于闪存的固态硬盘在工作状态下能耗与发热量较小,但高端或大容量产品能耗较高;
7、出现机械错误的可能性很低,不怕碰撞、冲击和震动;
8、工作温度范围大;
9、体积小。

1、成本高、最大容量低;
2、由于不像传统硬盘那样疲敝于法拉第笼中,固态硬盘更容易收到某些外界因素的不良影响。如断电(基于DRAM的固态硬盘尤甚)、磁场干扰、静电等。
3、写入寿命有限(基于闪存)。一般闪存写入寿命为1万到10万次,特制的可大100万到500万次,然而整台计算机寿命期内文件系统的某些部分的写入次数仍将超过这一极限;
4、数据损坏后难以恢复。一旦在硬件上发生损坏,如果是传统的磁盘或者磁带存储方式,通过数据恢复也许还能挽救一部分数据。但是如果是固态存储,一但芯片发生损坏,要想在碎成几瓣或者被电流击穿的芯片中找回数据那几乎就是不可能的;
5、能耗较高,基于DRAM的固态硬盘在任何时候的能耗都高于传统硬盘,尤其是关闭时仍需供电,否则数据丢失。

项目 固态硬盘 传统硬盘
容量 较小
价格
防震 很好 较差
重量
随机存取 极快 一般
写入次数 SLC:10万次
MLC:1万次
无限制
盘内阵列 极难
工作噪音
工作温度 极低 较明显
数据恢复 可以

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

原文:??https://blog.51cto.com/u_15198640/2772018??

安装指定源pip install -i ??https://pypi.douban.com/simple?? package name

升级pip install --upgrade package

这里以在python2环境下的notebook添加python3 kernel为例,

首先,确保python3环境下安装了ipykernel

然后在python3的python.exe所在目录下执行`

可以添加命令 为kernel指定名字

使用命令可以查看当前的kernel

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

参看:https://blog.csdn.net/hicoldcat/article/details/64904652

1、配置鼠标右键

第一步: 把 Cmder 加到环境变量
把存放的目录添加到系统环境变量; 加完之后,一下输入,即可。

第二步: 添加 cmder 到右键菜单
环境变量添加后,在任意文件夹中即可打开,上一步的把 加到环境变量就是为此服务的, 在管理员权限的终端输入以下语句即可:


2、为Cmder.exe创建快捷方式

右击选择“创建快捷方式”点击即可,以后打开只要点击桌面对应的快捷方式即可


如果没有设置,那么就会一直提示不安全,有风险等,因此如果你的电脑有那么按照如下方式会帮你解决问题:
1, 打开安全卫士,点击
快速打开Cmder的两种方式_Cmder

2,点击
快速打开Cmder的两种方式_快速打开_02
3,添加
快速打开Cmder的两种方式_快速打开_03
4,在次打开,问题解决


参考:https://blog.csdn.net/wh8514/article/details/81532286

如果想去看官方的资料,请点击https://github.com/dunovank/jupyter-themes


1,安装jupyter主题:

2,更新Jypyter主题:

3,列出主题:

4,切换主题:

按照步骤3的结果展示,去挑选自己喜欢的主题,主题样式查看,可点击这里


Jupyter Notebook 设置背景主题、字体大小_Notebook


ps:可自己翻译一下,辛苦~~

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

Tip:有任何问题,conda的官方文档是最有用的: ??https://github.com/conda/conda/issues??


感谢参考文章的小伙计,在我另一条路走不通时,给我新的路径
整体思路很简单:

在命令窗口输入命令后,按y就好

Jupyter Notebook怎么样使用虚拟环境_Jupyter Notebook

可以看到,咱们的env1创建好了
Jupyter Notebook怎么样使用虚拟环境_虚拟环境_02

当命令行出现(env1)也就是虚拟环境名,说明我们切换成功Jupyter Notebook怎么样使用虚拟环境_虚拟环境_03

中途会出现让你确认,直接输入y即可Jupyter Notebook怎么样使用虚拟环境_虚拟环境_04

出现如下所示,说明我们已经安装成功Jupyter Notebook怎么样使用虚拟环境_虚拟环境_05

为了以防万一,我们在jupyter的环境中看一下

输入命令后,前边的虚拟环境名消失,说明我们退出了环境Jupyter Notebook怎么样使用虚拟环境_Jupyter Notebook_06

在这里我们可以清晰的看见env1已经被加入我们的内核中了Jupyter Notebook怎么样使用虚拟环境_虚拟环境_07

命令
打开jupyterJupyter Notebook怎么样使用虚拟环境_虚拟环境_08
查看一下结果,可以看到新的内核已经能被识别出来了,至此,完成了我们的任务
Jupyter Notebook怎么样使用虚拟环境_Jupyter Notebook_09

输入以上命令,然后yes,就可以卸载内核了Jupyter Notebook怎么样使用虚拟环境_Jupyter Notebook_10
还是为了以防万一,我们在去jupyter查看一下,具体的网页中的效果需要你们自己看哦

bingo,我们发现env1已经消失了,哈哈,大功告成Jupyter Notebook怎么样使用虚拟环境_虚拟环境_11

错误经历(切勿参考,与君共勉)


1,windows7

2,anaconda 3

1,搭建环境

2,使用创建python环境

如果前两步骤有问题,请点击《??用conda创建python虚拟环境(windows环境)??》

3, 安装支持虚拟环境的插件

4,然后启动jupyter note即可。


Jupyter Notebook怎么样使用虚拟环境_虚拟环境_12

1,conda info -e报错

Jupyter Notebook怎么样使用虚拟环境_虚拟环境_13

2,

Jupyter Notebook怎么样使用虚拟环境_Jupyter Notebook_14

因为自己经常要看,所以为了方便进行转载

原文:??https://blog.51cto.com/u_14582976/2829453??

张量--->??blog??

浅谈什么是张量tensor_tensor

也许你已经下载了TensorFlow,而且准备开始着手研究深度学习。但是你会疑惑:TensorFlow里面的Tensor,也就是“张量”,到底是个什么鬼?也许你查阅了维基百科,而且现在变得更加困惑。也许你在NASA教程中看到它,仍然不知道它在说些什么?问题在于大多数讲述张量的指南,都假设你已经掌握他们描述数学的所有术语。

别担心!

我像小孩子一样讨厌数学,所以如果我能明白,你也可以!我们只需要用简单的措辞来解释这一切。所以,张量(Tensor)是什么,而且为什么会流动(Flow)?

目录

0维张量/标量  标量是一个数字

1维张量/向量   1维张量称为“向量”。

2维张量    2维张量称为矩阵

3维张量  公用数据存储在张量 时间序列数据 股价 文本数据 彩色图片(RGB)

结论

让我们先来看看tensor(张量)是什么?

张量=容器

张量是现代机器学习的基础。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。

张量有多种形式,首先让我们来看最基本的形式,你会在深度学习中偶然遇到,它们在0维到5维之间。我们可以把张量的各种类型看作这样(对被题目中的猫咪吸引进来小伙伴说一句,不要急!猫咪在后面会出现哦!):

0维张量/标量 ,装在张量/容器水桶中的每个数字称为“标量”。标量是一个数字。你会问为什么不干脆叫它们一个数字呢?我不知道,也许数学家只是喜欢听起来酷?标量听起来确实比数字酷。

实际上,你可以使用一个数字的张量,我们称为0维张量,也就是一个只有0维的张量。它仅仅只是带有一个数字的水桶。想象水桶里只有一滴水,那就是一个0维张量。

本教程中,我将使用Python,Keras,TensorFlow和Python库Numpy。在Python中,张量通常存储在Nunpy数组,Numpy是在大部分的AI框架中,一个使用频率非常高的用于科学计算的数据包。

你将在Kaggle(数据科学竞赛网站)上经常看到Jupyter Notebooks(安装见文末阅读链接,“数学烂也要学AI:带你造一个经济试用版AI终极必杀器”)关于把数据转变成Numpy数组。Jupyter notebooks本质上是由工作代码标记嵌入。可以认为它把解释和程序融为一体。

我们为什么想把数据转换为Numpy数组?

很简单。因为我们需要把所有的输入数据,如字符串文本,图像,股票价格,或者视频,转变为一个统一得标准,以便能够容易的处理。

这样我们把数据转变成数字的水桶,我们就能用TensorFlow处理。

它仅仅是组织数据成为可用的格式。在网页程序中,你也许通过XML表示,所以你可以定义它们的特征并快速操作。同样,在深度学习中,我们使用张量水桶作为基本的乐高积木。

1维张量/向量 如果你是名程序员,那么你已经了解,类似于1维张量:数组

每个编程语言都有数组,它只是单列或者单行的一组数据块。在深度学习中称为1维张量。张量是根据一共具有多少坐标轴来定义。1维张量只有一个坐标轴。 1维张量称为“向量”。我们可以把向量视为一个单列或者单行的数字。

如果想在Numpy得出此结果,按照如下方法:我们可以通过NumPy’s ndim函数,查看张量具有多个坐标轴。我们可以尝试1维张量。

2维张量  你可能已经知道了另一种形式的张量,矩阵——2维张量称为矩阵,这不是基努·里维斯(Keanu Reeves)的电影《黑客帝国》,想象一个excel表格。我们可以把它看作为一个带有行和列的数字网格。这个行和列表示两个坐标轴,一个矩阵是二维张量,意思是有两维,也就是有两个坐标轴的张量。

在Numpy中,我们可以如下表示:

x=np.array([[5,10,15,30,25],

[20,30,65,70,90],

[7,80,95,20,30]])

x=np.array([[5,10,15,30,25],

  1.  

  2.  


  3.  

  4.  

我们可以把人的特征存储在一个二维张量。有一个典型的例子是邮件列表。

比如我们有10000人,我们有每个人的如下特性和特征:


  1.  

  2.  

  3.  

  4.  

  5.  

  6.  

这意味着我们有10000人的七个特征。

张量具有“形状”,它的形状是一个水桶,即装着我们的数据也定义了张量的最大尺寸。我们可以把所有人的数据放进二维张量中,它是(10000,7)。

你也许想说它有10000列,7行。不。张量能够被转换和操作,从而使列变为行或者行变为列。

3维张量

这时张量真正开始变得有用,我们经常需要把一系列的二维张量存储在水桶中,这就形成了3维张量。

在NumPy中,我们可以表示如下:


  1.  

  2.  

  3.  

  4.  

  5.  

  6.  

  7.  

  8.  

你已经猜到,一个三维张量有三个坐标轴,可以这样看到:


  1.  

  2.  

让我们再看一下上面的邮件列表,现在我们有10个邮件列表,我们将存储2维张量在另一个水桶里,创建一个3维张量,它的形状如下:

(number_of_mailing_lists, number_of_people, number_of_characteristics_per_person)

(10,10000,7)

你也许已经猜到它,但是一个3维张量是一个数字构成的立方体。

我们可以继续堆叠立方体,创建一个越来越大的张量,来编辑不同类型的数据,也就是4维张量,5维张量等等,直到N维张量。N是数学家定义的未知数,它是一直持续到无穷集合里的附加单位。它可以是5,10或者无穷。

实际上,3维张量最好视为一个立方体,有长宽高这样的。

存储在张量数据中的公式

这里有一些存储在各种类型张量的公用数据集类型:

3维=时间序列

4维=图像

5维=视频

几乎所有的这些张量的共同之处是样本量。样本量是集合中元素的数量,它可以是一些图像,一些视频,一些文件或者一些推特。

通常,真实的数据至少是一个数据量。

把形状里不同维数看作字段。我们找到一个字段的最小值来描述数据。

因此,即使4维张量通常存储图像,那是因为样本量占据张量的第4个字段。

例如,一个图像可以用三个字段表示:

(width, height, color_depth)=3D

但是,在机器学习工作中,我们经常要处理不止一张图片或一篇文档——我们要处理一个集合。我们可能有10,000张郁金香的图片,这意味着,我们将用到4D张量,就像这样:

(sample_size, width, height, color_depth)=4D

我们来看看一些多维张量存储模型的例子:

时间序列数据

用3D张量来模拟时间序列会非常有效!

医学扫描——我们可以将脑电波(EEG)信号编码成3D张量,因为它可以由这三个参数来描述:

(time, frequency, channel)

这种转化看起来就像这样:

如果我们有多个病人的脑电波扫描图,那就形成了一个4D张量:

(sample_size, time, frequency, channel)

Stock Prices

在交易中,股票每分钟有最高、最低和最终价格。如下图的蜡烛图所示:

纽交所开市时间从早上9:30到下午4:00,即6.5个小时,总共有6.5 x 60=390分钟。如此,我们可以将每分钟内最高、最低和最终的股价存入一个2D张量(390,3)。如果我们追踪一周(五天)的交易,我们将得到这么一个3D张量:

(week_of_data, minutes, high_low_price)

即:(5,390,3)

同理,如果我们观测10只不同的股票,观测一周,我们将得到一个4D张量

(10,5,390,3)

假设我们在观测一个由25只股票组成的共同基金,其中的每只股票由我们的4D张量来表示。那么,这个共同基金可以有一个5D张量来表示:

(25,10,5,390,3)

文本数据

我们也可以用3D张量来存储文本数据,我们来看看推特的例子。

首先,推特有140个字的限制。其次,推特使用UTF-8编码标准,这种编码标准能表示百万种字符,但实际上我们只对前128个字符感兴趣,因为他们与ASCII码相同。所以,一篇推特文可以包装成一个2D向量:

(140,128)

如果我们下载了一百万篇川普哥的推文(印象中他一周就能推这么多),我们就会用3D张量来存:

(number_of_tweets_captured, tweet, character)

这意味着,我们的川普推文集合看起来会是这样:

(1000000,140,128)

图片

4D张量很适合用来存诸如JPEG这样的图片文件。之前我们提到过,一张图片有三个参数:高度、宽度和颜色深度。一张图片是3D张量,一个图片集则是4D,第四维是样本大小。

著名的MNIST数据集是一个手写的数字序列,作为一个图像识别问题,曾在几十年间困扰许多数据科学家。现在,计算机能以99%或更高的准确率解决这个问题。即便如此,这个数据集仍可以当做一个优秀的校验基准,用来测试新的机器学习算法应用,或是用来自己做实验。

Keras 甚至能用以下语句帮助我们自动导入MNIST数据集:


  1.  

这个数据集被分成两个部分:训练集和测试集。数据集中的每张图片都有一个标签。这个标签写有正确的读数,例如3,7或是9,这些标签都是通过人工判断并填写的。

训练集是用来训练神经网络学习算法,测试集则用来校验这个学习算法。

MNIST图片是黑白的,这意味着它们可以用2D张量来编码,但我们习惯于将所有的图片用3D张量来编码,多出来的第三个维度代表了图片的颜色深度

MNIST数据集有60,000张图片,它们都是28 x 28像素,它们的颜色深度为1,即只有灰度。

TensorFlow这样存储图片数据:

(sample_size, height, width, color_depth).

于是我们可以认为,MNIST数据集的4D张量是这样的:

(60000,28,28,1)

彩色图片

彩色图片有不同的颜色深度,这取决于它们的色彩(注:跟分辨率没有关系)编码。一张典型的JPG图片使用RGB编码,于是它的颜色深度为3,分别代表红、绿、蓝。

这是一张我美丽无边的猫咪(Dove)的照片,750 x750像素,这意味着我们能用一个3D张量来表示它:

(750,750,3)

 

My beautiful cat Dove (750 x 750 pixels)

这样,我可爱的Dove将被简化为一串冷冰冰的数字,就好像它变形或流动起来了。

然后,如果我们有一大堆不同类型的猫咪图片(虽然都没有Dove美),也许是100,000张吧,不是DOVE它的,750 x750像素的。我们可以在Keras中用4D张量来这样定义:

(10000,750,750,3)

 

5D张量

5D张量可以用来存储视频数据。TensorFlow中,视频数据将如此编码:

(sample_size, frames, width, height, color_depth)

如果我们考察一段5分钟(300秒),1080pHD(1920 x 1080像素),每秒15帧(总共4500帧),颜色深度为3的视频,我们可以用4D张量来存储它:

(4500,1920,1080,3)

当我们有多段视频的时候,张量中的第五个维度将被使用。如果我们有10段这样的视频,我们将得到一个5D张量:

(10,4500,1920,1080,3)

实际上这个例子太疯狂了!

这个张量的大是很荒谬的,超过1TB。我们姑且考虑下这个例子以便说明一个问题:在现实世界中,我们有时需要尽可能的缩小样本数据以方便的进行处理计算,除非你有无尽的时间。

这个5D张量中值的数量为:

10 x 4500 x 1920 x 1080 x 3=279,936,000,000

在Keras中,我们可以用一个叫dype的数据类型来存储32bits或64bits的浮点数

我们5D张量中的每一个值都将用32 bit来存储,现在,我们以TB为单位来进行转换:

279,936,000,000 x 32=8,957,952,000,000

这还只是保守估计,或许用32bit来储存根本就不够(谁来计算一下如果用64bit来存储会怎样),所以,减小你的样本吧朋友。

事实上,我举出这最后一个疯狂的例子是有特殊目的的。我们刚学过数据预处理和数据压缩。你不能什么工作也不做就把大堆数据扔向你的AI模型。你必须清洗和缩减那些数据让后续工作更简洁更高效

降低分辨率,去掉不必要的数据(也就是去重处理),这大大缩减了帧数,等等这也是数据科学家的工作。如果你不能很好地对数据做这些预处理,那么你几乎做不了任何有意义的事。

结论:好了,现在你已经对张量和用张量如何对接不同类型数据有了更好的了解。

学习如何在张量上做各种变换,这就是大家所熟知的数学。换句话说,我们将让张量“流动Flow起来”。

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

TIPS:


原始保存

 

此时,效果如下
numpy写入csv文件时不使用科学计数法_numpy
接下来,想取消掉科学计数法

保留多位小数

 

numpy写入csv文件时不使用科学计数法_numpy_02
大体对了,但是不符合数据原貌,接者还原

保留原始位小数

 

numpy写入csv文件时不使用科学计数法_numpy_03
最后,只保留整数位

保留整数

 

numpy写入csv文件时不使用科学计数法_numpy_04
nice,功成


numpy.savetxt

 


将数组保存到文本文件中。


参数解释


如果文件名以.gz结尾,文件将自动以压缩的gzip格式保存。loadtxt透明地获取gzip压缩的文件。

要保存到文本文件中的数据。

单一格式(%10.5f)、一系列格式或多格式字符串,如“Iteration %d - %10.5f”,在这种情况下忽略分隔符,不同的列对应不同的规则。

分隔列的字符串或字符。

字符串或字符分隔行。
新版本1.5.0。

将在文件开头写入的字符串。
新版本1.7.0。

将在文件末尾写入的字符串。
新版本1.7.0。

将前缀到 和 字符串的字符串,将它们标记为注释。默认值:’ # ',如numpy.loadtxt所期望的那样。
新版本1.7.0。

用于输出文件的编码。不适用于输出流。如果编码不是“bytes”或“latin1”,您将无法加载NumPy版本< 1.14中的文件。默认是“latin1”。
新版本1.14.0。


(?▽?) (?▽?) (?▽?)

Tips:要耐心看,不难,也不麻烦…

np.c_

将切片对象转换为沿第二轴的连接。
这是简单的,因为它很常见,所以很有用。特别是,阵列将在升级到至少2-D后沿着它们的最后一个轴堆叠,其中1个后置为形状(由1-D阵列制成的列向量)

例子


 

np.r_

np.insert

np.row_stack

np.cloum_stack

np.c_ | np.r_代码

 

[[1 2 3]
[4 5 6]
[7 8 9]
[0 0 0]]

[[1 2 3 0]
[4 5 6 0]
[7 8 9 0]]

  • 该方法只能将两个矩阵合并
  • 注意要合并的两矩阵的行列关系

np.insert代码

 

[[0 0 0]
[1 2 3]
[4 5 6]
[7 8 9]]

[[0 1 2 3]
[0 4 5 6]
[0 7 8 9]]

  • 这种是将一个集合插入到一个矩阵中,对于b可以是列表或元组,它仅仅提供要插入的值,但个数要对
  • np.insert的第二个参数是插入的位置,axis用来控制是插入行还是列,可见该方法非常灵活!

np.row_stack | np.colum_stack 代码

 
  • 类似于c_, r_

END

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

举报文章

请选择举报类型

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

具体原因

包含不真实信息 涉及个人隐私

补充说明

0/200

上传截图

格式支持JPEG/PNG/JPG,图片不超过1.9M

已经收到您得举报信息,我们会尽快审核

本教程将指导您如何打包一个简单的Python项目。它将从0开始向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上传到PyPI供他人使用。

子曰:知之为不知,不知为不知,太菜也!

要点说明:

  1. 本文从最基础的创建文件开始,如果不需,请跳至上传并发布包文件到PyPI
  2. 为了防止包冲突,可采用conda的虚拟环境来搭建环境
  3. 更多细节参看官网(会有坑)

本教程使用一个名为的简单项目。即使您已经有一个要打包的项目,我们仍然建议您按照本示例包使用此示例包,然后尝试使用自己的包。

TIPS: 文件用来表示忽略的文件目录,此处知道便可。

要在本地创建此项目,请创建以下文件结构:

packaging_tutorial/
example_pkg/
__init__.py

创建此结构后,您将需要在顶级文件夹中运行本教程中的所有命令 - 所以需要

您还应该编辑并在其中放入以下代码:

name?=?"example_pkg"

这只是为了让您可以在本教程后面验证它是否正确安装,并且PyPI不会使用它。


添加前须知

  • 假设你的包已经开发完成,并且根目录必须要有一个setup.py
  • 最好有一个 README.md用来描述你的包,虽然这不是必须的,但文档性说明,你最好还是要有的。
  • 如果你需要打包代码文件夹以外的文件,比如版权信息等等,你还需要写一个 LICENSE

您现在将创建一些文件。创建下面列出的新文件,下面会详细介绍每个文件的内容。

packaging_tutorial/
example_pkg/
__init__.py
setup.py
LICENSE
README.md

创建的setup.py

setuptools的构建脚本。它告诉setuptools你的包(例如名称和版本)以及要包含的代码文件。

打开并输入以下内容。更新软件包名称以包含您的用户名(例如),这可确保您拥有唯一的软件包名称,并且保证和其他人的软件包不会发生冲突。

import?setuptoolswith?open("README.md",?"r")?as?fh:
long_description?=?fh.read()setuptools.setup(
name="example-pkg-your-username",
version="0.0.1",
author="Example?Author",
author_email="author@example.com",
description="A?small?example?package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming?Language?::?Python?::?3",
"License?::?OSI?Approved?::?MIT?License",
"Operating?System?::?OS?Independent",
],
python_requires='>=3.6',)

需要注意几个点。此示例包列出了最重要的几个:

  • name 是包的分发名称。只能包含字母、数字和中划线。但是要保证在 pypi.org上没有重名。请务必使用您自己的包名称更新此内容,因为这样尽可能的能避免和其他包名冲突。

  • version 是包版本。看 PEP 440有关版本的更多详细信息。

  • authorauthor_email 用于识别包的作者。

  • description 是一个简短的,一句话的包的总结。

  • long_description是包的详细说明。这显示在PytPI的包详细信息包中。在一般情况下,README.md作为描述信息是一种常见模式。

  • long_description_content_type告诉索引什么类型的标记用于长描述。上面代码中,这个值为Markdown

  • url是项目主页的URL。对于许多项目,可以指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。

  • packages是应包含在分发包中的所有Python 导入包的列表。我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包。在这种情况下,包列表将是,因为它是唯一存在的包。

  • classifiers给出了你的包一些额外的元数据。在上面代码中,该软件包仅与Python 3兼容,根据许可证进行许可,并且与操作系统无关。您应始终至少包含您的软件包所使用的Python版本,软件包可用的许可证以及您的软件包将使用的操作系统。有关分类器的完整列表,请参阅这里

除了这里提到的还有很多。有关详细信息,请参阅 打包和分发项目

创建README.md

打开README.md并输入以下内容。如果您愿意,可以自定义此项。

#?Example?Package

This?is?a?simple?example?package.?You?can?use
[Github-flavored?Markdown](https://guides.github.com/features/mastering-markdown/)
to?write?your?content.

创建许可证

上传到PyPI的每个包都包含许可证,这一点很重要。这告诉用户安装您的软件包需要使用您的软件包的条款。有关选择许可证的帮助,请访问。选择许可证后,打开并输入许可证文本。例如,如果您选择了MIT许可证:

Copyright?(c)?2018?The?Python?Packaging?Authority

Permission?is?hereby?granted,?free?of?charge,?to?any?person?obtaining?a?copy
of?this?software?and?associated?documentation?files?(the?"Software"),?to?deal
in?the?Software?without?restriction,?including?without?limitation?the?rights
to?use,?copy,?modify,?merge,?publish,?distribute,?sublicense,?and/or?sell
copies?of?the?Software,?and?to?permit?persons?to?whom?the?Software?is
furnished?to?do?so,?subject?to?the?following?conditions:

The?above?copyright?notice?and?this?permission?notice?shall?be?included?in?all
copies?or?substantial?portions?of?the?Software.

THE?SOFTWARE?IS?PROVIDED?"AS?IS",?WITHOUT?WARRANTY?OF?ANY?KIND,?EXPRESS?OR
IMPLIED,?INCLUDING?BUT?NOT?LIMITED?TO?THE?WARRANTIES?OF?MERCHANTABILITY,
FITNESS?FOR?A?PARTICULAR?PURPOSE?AND?NONINFRINGEMENT.?IN?NO?EVENT?SHALL?THE
AUTHORS?OR?COPYRIGHT?HOLDERS?BE?LIABLE?FOR?ANY?CLAIM,?DAMAGES?OR?OTHER
LIABILITY,?WHETHER?IN?AN?ACTION?OF?CONTRACT,?TORT?OR?OTHERWISE,?ARISING?FROM,
OUT?OF?OR?IN?CONNECTION?WITH?THE?SOFTWARE?OR?THE?USE?OR?OTHER?DEALINGS?IN?THE
SOFTWARE.

生成分发资源

下一步是为包生成分发包。这些是上传到包索引的资源,可以通过pip安装。

确保您拥有setuptoolswheel并升级到了最新版本:

python3?-m?pip?install?--user?--upgrade?setuptools?wheel

提示: 如果您在安装它们时遇到问题,请参阅 安装包 教程。
现在从setup.py位于的同一目录运行此命令:

python3?setup.py?sdist?bdist_wheel

此命令应输出大量文本,一旦完成,应在目录中生成两个文件:

dist/
example_pkg_your_username-0.0.1-py3-none-any.whl
example_pkg_your_username-0.0.1.tar.gz

tar.gz文件是源存档,而该文件是构建的发行版。较新的版本优先安装构建的发行版,但如果需要,将回退到源代码存档。您应该始终上传源存档并为项目兼容的平台提供构建的存档。


创建 PyPI账号

非常简单,直接通过官网注册, 但是需要验证邮件并确认激活。

创建用户验证文件

提示:如何在win中配置pypi
在自己的用户目录下新建一个空白文件命名为,内容如下:

[distutils]
index-servers=pypi

[pypi]
repository?=?https://upload.pypi.org/legacy/
username?=password?=

用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。

上传并完成发布

python3?-m?twine?upload?dist/*

查看结果

至此,你已经成功上传了你发行包!可以在官网查看。如果正常,应该出现如下画面。
PyPI打包实践教程-2019_打包


包发布完成后,其他人只需要使用就可以安装你的包文件(将换成你的包名即可)。比如:

pip?install?FreeBird

如果你更新了包,别人可以可以通过–update参数来更新:

pip?install?FreeBird?--update

您可以通过导入模块并引用先前name放置的属性来测试它是否已正确安装。
运行解释器:

python

然后导入模块并打印出name属性。这应该是与你导入的包一样,而不是你给你的分发包中设置的名字。(上述代码中的FreeBird),因为你的导入包是。

>>>?import?example_pkg
>>>?example_pkg.name
'example_pkg'

Upload failed : Invalid or non-existent authentication information.
错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc。请参阅上文。

Upload failed : You are not allowed to edit ‘xxx’ package information
你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register

Server response : Incomplete registration; check your email
你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。

Server response : Invalid classifier “Topic :: Software Development :: Utilities”
你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.

error: No dist file created in earlier command
你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如:

python?setup?sdist?upload
error:?Upload?failed?(499):?Client?Disconnected

这应该是网络问题,多重试几次。

Upload failed : File already exists
文件已经存在了,你每一次上次都应该更新版本号。


https://segmentfault.com/a/1190000008663126

关于作者:Java\Python技术爱好者,目前还是一枚学生小鲜肉,转载请注明原文出处。
欢迎到我的中去讨论。

PyPI打包实践教程-2019_PyPI_02



你懂了没?

LeetCode 3
参考

题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

题目解析

暴力破解

 

滑动窗口

立即在线咨询 关闭
地址:广东省广州市天河区88号    电话:400-123-4567     传真:+86-123-4567
Copyright © 2012-2018 耀世-耀世娱乐咨询法律事务所 版权所有 非商用版本     ICP备案编号:琼ICP备985981119号

平台注册入口