基于 Jython 的大型应用系统动态实现

Python爬虫之爬取并下载哔哩哔哩视频 它可以爬取并下载视频文件和音频文件!亲自使用过,太好用了。 阅读详情

源自:http://www.ibm.com/developerworks/cn/java/j-lo-jythonconfig/


引言

伴随信息时代的的迅猛发展,互联网已经全面渗透到电子商务,金融,电信,物流,资源等各个领域并逐渐成为其不可或缺的一部分。

信息时代,时间就意味着金钱。伴随着各种大型应用系统的普及,人们对于系统的稳定性,对与零宕机硬件不断的提出更高要求,却往往会忽视应用系统自身升级所带来的问题。


什么是 Jython

Jython 是一种完整的语言,而不是一个简单的 Java 翻译器或 Python 编译器,它是 Python 在 Java 中的完整实现。由于 Jython 继承了 Java 和 Python 二者的特性从而使其显得很独特。

看到这里读者一定会问,那 Jython,Java 以及 Python 之间的关系到底是怎么样的呢?其实,我理解 Jython 说简单一些,就是用 Java 语言实现的 Python 解释器,这种关系也就意味着你可以用 Python 语言编写程序而同时使用 Java 库。

在这里我不想大篇幅的阐述 Jython 是什么,如果各位读者感兴趣,请参阅 Jython 介绍

发现问题

大型的应用系统从不同的应用层面大致可以分为 :

  • UI 层

该层应该说是比较稳定的,或者说它的变化对于整个系统的运行不会带来特别严重的影响。

  • 接口层

该层与上层的 UI 以及底层的实现,都有着紧密的联系,所谓牵一发而动全身。作为一位大型应用系统的架构师或是系统设计人员,往往会出于维护成本以及开发成本的考虑,尽可能会让这个层面的设计与定义相对灵活。

  • 实现层

该层可以说是系统最核心的层面,整个系统的核心处理逻辑都会放在这一层面上。而往往该层,在实际使用过程中也是最不稳定的,最容易从需求角度发生变化。

  • 数据层

该层其实说简单一些就是数据库层,用于用户数据的查询、组装、更新等等,提供持久的数据服务,我们可以认为它也是个比较稳定的层面。

问题焦点似乎发现了,如何让我们的实现层更加灵活成为核心问题所在。那么如何能让我们系统的核心“与时俱进”呢?

分析问题

接下来,让我们看看一个系统的实现层都可能会干哪些事情:

  1. 接收通过接口传递过来的用户数据
  2. 依据一定的业务逻辑,处理用户数据
  3. 将处理结果更新到数据库中(可选)
  4. 将处理结果响应给 UI 层并渲染出来

分析到这里。我们对于实现层的内部数据流向又有了更进一步直观的认识。而我们对于实现层定义的所谓变数所在,也就比较明显了,如何实现业务处理逻辑的分离成为我们的目标。

解决问题

动态算法核心

本段以一个简单的 Python 方法为例,介绍如何借助 Jython 的动态执行能力来实现系统核心算法,以供 Java 代码调用。

Java 层代码片段

 PythonInterpreter interpreter=new PythonInterpreter();              
 PySystemState sys = Py.getSystemState(); 

 // 将 Jython 库加入系统的 classpath 中或直接通过这种方式动态引入
 sys.path.add("D:\\jython2.5.2\\Lib");  

 // 执行算法所在的 python 文件
 interpreter.execfile("impl/demo.py");

Jython 层代码片段

def getValue(o): 
    result = 0 
    if o < 2: 
      return -1 
    else: 
      for i in range(o): 
       		result +=i 
    return result

该方法很简单,当用户数据小于 2 时返回运算结果 -1,当用户数据大于等于 2 时,返回从 0 到输入数据的和。

Java 调用

 PyFunction pyFunction = (PyFunction)interpreter.get("getValue",PyFunction.class ); 

 System.out.println("Result: "+pyFunction.__call__(new PyInteger(100)));

通过 PyFunction 对象的内置方法 __call__() 传入用户数据。因为 Python 文件本身具备动态编译执行能力,所以我们只需要更新算法核心部分的 Python 代码,就可以达到动态改变系统底层算法的目的,而不需要更新 jar 包或重新部署应用而重启应用系统。

上边这个例子其实很简单,我们假设这个简单的 Jython 方法就是我们的业务逻辑,它会返回处理结果供上层渲染,但当业务逻辑发生了变化,比如当用户输入等于 2 时也要求返回值是 -1,此时对于这样一个简单的需求,我们只需要修改 Jython 代码就好了,并不需要更新 Java 层的东西。

动态配置文件

本段着重介绍,当系统中配置文件中若该项的数值需要发生变化时,我们如何来解决动态获取最新配置的问题。

配置文件 ( demo.properties )

假设我们为每一次查询结果定义了最大的返回数目为 100

 MaxValue=100 
…

Java 层代码片段

 PythonInterpreter interpreter=new PythonInterpreter();              
 PySystemState sys = Py.getSystemState(); 
 sys.path.add("D:\\jython2.5.2\\Lib"); 

 //‘re’是 Python 自身提供的正则表达式库,在 Python 方法中我们需要用到这个库中的方法,所以需要提前导入进来
 interpreter.exec("import re"); 

 interpreter.execfile("impl/demo.py"); 
 PyFunction pyFunction = (PyFunction)interpreter.get("getconfig",PyFunction.class );

Jython 层代码片段

import re
def getconfig(flag):
    result=''
    f=open('demo.properties','r')
    for i in f:
        g=re.findall(flag+'.*=.*',i)
        if len(g)>0:
            al=g[0].split('=')            
            result=al[1].strip()
            break    
return result

这个方法很简单根据我们传入的条目名称,获取配置文件中对应条目的定义数值。

Java 调用

System.out.println("Config value: "+pyFunction.__call__(new PyString("MaxValue")));

借助 Python 强大的文本处理能力,由 Python 作为 Java 代码和配置文件之间的桥梁,从而动态的获取最新配置项数值。

相比纯 Java 内存操作的实现方式,这种实现机制从运行速度上可能没有什么优势,但是却可以给我们带来一种新的理念。也许我们可以将这两种方式融合起来找到某种平衡,既不影响系统的运行效率又保留了 Python 动态的运行机制,达到双赢的目的。

动态后台实现

前边已经提到了系统接口定义层和实现层之间的关系。那么我们是否可以借助 Jython 来帮助我们动态实现定义的接口呢?答案很明显,当然可以。

这里我就以一个简单的例子,介绍一下如何借助 Jython 实现可插拔式的后台实现。利用 Jython 来实现 Java 定义的接口。从而可以被其他的 Java 方法调用。

Java 接口定义

 package com; 
 public interface Worker { 
 public String getFirstName(); 
    public String getLastName(); 
    public String getId(); 
    public 
				 void setId(); 
 }

上边是一个简单的人员接口,接口的实现类中我们就需要实现这里定义的 4 个方法。

Jython 层代码片段 ( 实现接口 )

 from com import Worker 
 class Worker(Worker): 
    def __init__(self): 
        self.first = "FirstName"
        self.last  = "LastName"

    def getFirstName(self): 
        return self.first 

    def getLastName(self): 
        return self.last 

    def getId(self): 
        return self.Id 

    def setId(self, newId): 
        self.Id = newId

我们在 Worker 类的构造函数中为该类的两个私有成员赋值,当调用 getFirstName() 或 getLastName() 方法时我们返回这两个私有成员的当前值。

Java 层代码片段

 Object javaObject; 
 PythonInterpreter interpreter=new PythonInterpreter();              
 PySystemState sys = Py.getSystemState(); 
 sys.path.add("D:\\jython2.5.2\\Lib");  
 interpreter.execfile("impl/demo.py"); 
 interpreter.exec("worker=Worker()"); 
 PyObject pyObject = interpreter.get("worker"); 
 pyObject.invoke("setId",new PyString("8888")); 
 try { 
     Class Interface = Class.forName(interfaceName); 
     javaObject = pyObject.__tojava__(Interface); 
 } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
 }

Java 调用

 Worker worker = (Worker) javaObject; 
 System.out.println("Name:"+worker.getFirstName()+worker.getLastName()); 
 System.out.println("ID:"+worker.getId());

看到这里就不必多说了,只需要动态的替换 Python 实现部分的代码,就可以实现可插拔式后台实现啦。而对于调用这个接口的 Java 对象来说,并不知道这个实现类是否发生了变化。

	/**
	 * <br>
	 * java直接执行python脚本(任意类型脚本)</br> <br>
	 * http://bbs.youkuaiyun.com/topics/390970924</br> <br>
	 * http://www.cnblogs.com/lmyhao/p/3363385.html</br> <br>
	 * http://bbs.chinaunix.net/thread-4185335-1-1.html</br>
	 * 
	 * @Title: runpythonbyexecfile
	 * @Description: <br>java直接执行python脚本</br>
	 * @param @param pythoncmd 设定文件
	 * @return String 返回类型
	 * @throws
	 */
	public String runpythonbyruntimeexec(String pythoncmd)
	{
		String defString = "result is:";
		if (null == pythoncmd || "".equals(pythoncmd))
		{
			defString += "error,the parameters filePath is empty or null!";
			return defString;
		}
		if (pythoncmd.matches("^python "))
		{
			defString += "error,the parameters filePath is error,it should be like ^python !";
			return defString;
		}
		Process pr;
		BufferedReader in;
		try
		{
			// String[] args = new String[] {"youpath2python\\python.exe","youscriptpath\\test.py","a","b","c","d" };
			// Process process = Runtime.getRuntime().exec(args);
			pr = Runtime.getRuntime().exec(pythoncmd);
			in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
			String line;
			
			while ((line = in.readLine()) != null)
			{
				defString += line+"\n";
			}
			in.close();
			pr.waitFor();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			in = null;
			pr = null;
		}
		return defString;
	}


可参考:

http://blog.youkuaiyun.com/wodestudy/article/details/8190707


STM32+ESP8266+MQTT协议连接阿里云物联网平台 一、环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。 开发软件:keil5 二、实现功能 通过阿里云物联网服务器实现设备数据远程上传、下发,实现数据交互。 在当前使用的开发板上有4盏LED灯、一个蜂鸣器、4个按键。 三、阿里云物联网服务器创建步骤 说明:如果没有账号的话,先点击网页右上角,注册一个账号,并完成实名认证再继续下一步。 产品名称根据自己情况填... 阅读详情

相关推荐

Windows环境下Elasticsearch与JDK版本兼容性实战指南

本文详细解析了Windows环境下Elasticsearch与JDK版本的兼容性问题,提供了从版本匹配检查到安装部署的完整实战指南。重点介绍了Elasticsearch 8.x需JDK 17+等关键版本对应关系,并分享多版本JDK共存方案及性能优化技巧,帮助开发者高效避坑。

weixin_29250403的博客 421

Jython使用

一、 Jython 简介 Jython 是一种完整的语言,而不是一个 Java 翻译器或仅仅是一个 Python 编译器,它是一个 Python 语言在 Java 中的完全实现。 Jython 也有很多从 CPython 中继承的模块库。最有趣的事情是 Jython 不像 CPython 或其他任何高级语言,它提供了对其实现语言的一切存取。所以 Jython 不仅给你提供了 P...

Cherry 2万+

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1809

jython 简单入门

简单记录一下如何使用jython jython是什么? 摘自百度百科 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。 jython如何使用? 官方给出了几种方式,可以安装,可以用依赖导入,我选取maven依赖导入的方式 <dependency> <groupId>org.python</groupId> <artifactId>jython-slim&l

sehnsucht 3451

(最新更新!)2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型完整建模全解全析

2024全国大学生数学建模竞赛(国赛)B题完整建模全解全析(已更新!)

Yilu264的博客 9421

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

使用 Jython 在 Java 中运行 Python

在第二个程序中,我们使用本机 Python 库来查找该月的最后一天。正如我们所知,Python Interpreter 不会加载所有的本地库,尽管 datetime 库是可用的。"\n" +"\n" +"\n" +"\n" +2022-12-31我们已经学习了如何使用 Jython 在 Java 中运行 python。这些代码主要介绍了如何使用以及何时使用 Jython。读者可以很容易地创建在 java 中运行 python 的程序。希望本文对大家的编码之旅有所帮助。

迹忆客 1292

Python之afdx包语法、参数和实际应用案例

Python 的 afdx 包是针对 AFDX 协议的轻量级开发工具,专注于 AFDX 数据帧的解析、构造、发送/接收、协议合规性校验等核心能力,广泛应用于航空电子设备测试、仿真、数据监控等场景。

王国平的博客 984

jython的使用

1.引入jar <dependency> <groupId>org.python</groupId> <artifactId>jython</artifactId> <version>2.7.2</version> </dependency> 2.main方法 public static void main(String[] args) { Properties pro

Dyeln的博客 3004

(王道408考研操作系统)第一章计算机系统概述-第三节2:中断和异常

注意!!! 本节内容和《计算机组成原理》中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式 为了内容完整,部分内容会借用上述文章 文章目录一:中断和异常的基本概念(1)中断和异常的定义 一:中断和异常的基本概念 在操作系统引入核心态和用户态这两种工作状态后,就需要考虑两种状态之间是如何切换的。 操作系统内核工作在核心态,用户程序工作在用户态,系统不允许用户程序使用核心态的功能,但是用户程序为了完成某些操作又必须使用这些功能

快乐江湖的博客 3535

在Simulink中实现基于深度强化学习的控制算法仿真建模

通过上述步骤,你可以在Simulink中实现基于深度强化学习的控制算法仿真建模。这种方法适用于许多复杂的控制问题,尤其是当传统控制方法难以找到有效解决方案时。随着经验的积累,你可以进一步探索不同的深度强化学习算法及其变种,以适应更广泛的应用场景。此外,还可以结合其他先进技术(如迁移学习、多智能体协作等),提升模型的表现能力。

amy_mhd的博客 416

Jython-在JAVA调用Python脚本使用方法详解+示例代码

Jython项目提供了Java中Python的实现,为Python提供了在JVM上运行和访问Java编写的类。当前版本(Jython 2.7.x)仅支持Python 2,目前写这篇文章的最新版本到了2.7.3了。这也没有办法,我看作者17年写到2.7之后道现在为止5年了还没有支持到Python 3.毕竟是人家的开源项目也不太好说什么,程序员都忙。最新版本Jython2.7.3仅支持Python2.7。那么如果我们的Python脚本里面使用到的一些代码或者是第三方库不兼容Python2.7版本的话,就会报错。

master_hunter的博客 9120

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1323

java运行python脚本_JAVA直接调用Python代码

使用场景:由于前同事有部分代码是用PYTHON写的,现在用JAVA再重构,但是发现其中有一部分逻辑比较复杂,短时间无法重构完,且这个模块相对比较独立,为了尽快上线,我选择这个模块还是用PYTHON不变,在JAVA里面直接调用PYTHON,当然性能不会好。什么是 JythonJython (官网http://www.jython.org)是一种完整的语言,而不是一个简单的 Java 翻译器或 Pyt...

weixin_39630744的博客 388

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Nuxeo公司探秘:从Python迁移到Java

成立于2000年的Nuxeo公司是一家开源的企业内容管理领域的专业公司。2006年,他们宣布正在进行从Python到Java的核心技术平台的迁移。四年之后,InfoQ再次采访了Nuxeo的CEO Eric Barroc,以了解这种技术转换的进展情况,以及他们新的技术栈和在ECM领域所处的地位。同时,我们也对动态和静态类型语言各自的优点进行了一些探讨。  ECM市场的发展遵循这样一个常见的模式:...

yourenyouyu的专栏 235

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python基础

1.计算机基础 计算机是由cpu,内存,硬盘,操作系统,应用程序几部分构成。 CPU:中央处理器。 内存:存储数据,读取速度较快,但是断电即消失。用于存储一些瞬时数据 硬盘:存储数据,分为机械硬盘和固态硬盘,固态硬盘读取速度>机械大范围。断电不消失,可以长久存储 操作系统:windows系列、Linux系列 应用程序:qq、微信等 ​ 应用程序调用:通过鼠标(输入设备)点击应用...

weixin_30627341的博客 105

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python 第一天基础

python 第一天基础计算机基础入门CPU:中央处理器。内存:存储数据,读取速度较快,但是断电即消失。用于存储一些瞬时数据硬盘:存储数据,分为机械硬盘和固态硬盘,固态硬盘读取速度>机械大范围。断电不消失,可以长久存储操作系统:windows系列、Linux系列应用程序:qq、微信等​ 应用程序调用:通过鼠标(输入设备)点击应用系统,操作系统将硬盘的数据读取到内存,在从内存调到cpu缓存中,在到

小白 502

工作中使用到的单词(软件开发)_第四版

本文汇总了2020-2025年间软件开发相关的工作笔记,主要包括三版技术词汇整理(2020-2025)、优快云文章导出PDF情况,以及2025年6月的专题整理。重点内容涉及:WebSphere中jackson包加载路径问题、Java异步线程类型(守护/非守护线程)的区分与解决方案、DB2数据库连接相关指令(db2listapplications等)、AWS托管服务优势,以及OSGi框架与Java的关系说明。特别标注了技术术语的英文发音(如initiative)和敏感信息处理注意事项(敏感度标签设置)。后续

sun0322 1347

jython 如何使用 Python 的类库?

Jython 是 Python 的一个实现,它允许你在 Java 虚拟机(JVM)上运行 Python 代码。与 CPython(标准的 Python 解释器)不同,Jython 可以直接调用 Java 类库,这使得它在需要与 Java 系统集成的场景中非常有用。Jython 的设计理念是“Python 语法 + Java 性能”,这使得它成为跨语言开发的理想选择。

yjq125931902的博客 1502

jython使用_使用Jython收集数据

IBM WebSphere Liberty概要文件通过使用监视功能来提供性能指标,该监视功能符合Java®Management Extension(JMX)标准。 本教程说明如何通过使用REST连接器API连接到Liberty服务器或Liberty集合控制器,使用Jython脚本检索这些指标。 在这一部分中,您将使用Jython脚本收集数据。 将REST连接器API复制到Jython目录 ...

cusi77914的博客 806

PyCharm:Python开发者的最佳伙伴

一、引言PyCharm是一款由JetBrains公司开发的集成开发环境(IDE),专为Python开发者设计。它为开发者提供了强大的代码编辑、调试、测试和集成版本控制等功能。自2009年发布以来,PyCharm已经成为Python开发者社区中最受欢迎的工具之一。本文将详细介绍PyCharm的特点、功能以及实际应用案例,帮助您更好地了解这款开发工具。二、PyCharm的特点智能代码编辑:PyCharm的智能代码编辑功能可以大大提高开发效率。

Python栈 797

【Python入门】超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

这两年被Python初学小白问到最多的问题就是,该用什么代码编辑工具?说实话,我个人是用Jupyter Notebook最多,主要是经常做数据可视化,方便些。但对于初学者来说,PyCharm仍是不二的选择,甚至我建议你只用PyCharm.从当前所有主流Python IDE来看,PyCharm是最适合做Python开发的,特别对新手而言,可以节省很多不必要的时间成本。那么具体如何使用呢?

程序员小芽的博客 1902

jython的应用(java调用python代码)

Jython 是一个将 Python 代码编译成 Java 字节码的工具,允许在 Java 环境中直接运行 Python 代码。Java 项目中,使用 Jython 的 API 来调用 Python 代码。

weixin_39766667的博客 258

Python Jython 库详解及使用示例

完全用 Java 编写在 JVM 上运行 Python 代码可以导入和使用任何 Java 类可以将 Python 代码编译为 Java 字节码。

学亮编程手记 879

Jython深度解析与实战演练

通过这些案例,我们可以看到Jython如何在Java应用程序中提供Python的动态特性和强大的库支持。Jython是一个非常有用的工具,特别是在需要在Java环境中集成Python代码时。虽然它有一些限制,但它的跨平台兼容性和集成性使其成为许多开发者的首选。

极客代码 1453

jython 如何使用 Python 的类库

jython 如何使用 Python 的类库

lza20001103的博客 974
上一篇: [转载]关闭Pycharm拼写检查
dreamjava9213
博客等级 码龄16年 7粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值