精华内容
下载资源
问答
  • Xlua实现代码逻辑更新

    2019-04-23 22:01:05
    之前有写过资源的热更新,但是没有去涉及到lua代码,今天写了个小demo去简单实现一下代码逻辑的更新。 点击按钮,生成一个白色Cube,通过xlua给c#打补丁,让其生成一个蓝色的比例是原来三倍的Cube。 下载Xlua...

    之前有写过资源的热更新,但是没有去涉及到lua代码,今天写了个小demo去简单实现一下代码逻辑的更新。

    点击按钮,生成一个白色Cube,通过xlua给c#打补丁,让其生成一个蓝色的比例是原来三倍的Cube。

    下载Xlua压缩包,将xlua 导入到unity工程目录下,之前的文章有讲过怎么导入。提前在发布之前,给C#中的类之后可能要修改的打上hotfix标签,方法打上LuaCallCSharp或者CSharpCallLua标签,方便之后打补丁。

    下面是c#  实现的简单逻辑:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using XLua;
    [Hotfix]
    public class TestXlua : MonoBehaviour
    {
        public GameObject CubePre;
    
        LuaEnv env;
        private Button _testBtn;
        GameObject obj;
        private void Awake()
        {
            env = new LuaEnv();
            _testBtn = GameObject.Find("Button").GetComponent<Button>();
            _testBtn.onClick.AddListener(OnClickEvent);
            _testBtn.onClick.AddListener(ChangeColor);
            env.DoString("require 'TestDemo'");
        }
    
    
         [LuaCallCSharp]
        public void OnClickEvent()
        {
           obj= Instantiate(CubePre, new Vector3(0, 1, 0),Quaternion.identity);
           
        }
        [LuaCallCSharp]
        public void ChangeColor()
        {
            if (obj!=null)
            {
                obj.GetComponent<MeshRenderer>().material.color = Color.red;
            }
        }
    
        private void Destroy()
        {
            _testBtn.onClick.RemoveAllListeners();
            env.Dispose();
        }
    
    }
    

    接下来是Lua代码,一些基本注意事项,要注意方法的调用: 调用不需要传入self参数,点调用要传入self参数,使用unity中的类要加CS前缀,util库 可以先执行c# 中的指定方法中的逻辑,在执行lua代码。

    local util=require 'util'
    util.hotfix_ex(CS.TestXlua,'OnClickEvent',function(self)
    	 self.OnClickEvent(self)
    	 self.obj.transform.localScale =CS.UnityEngine.Vector3(3,3,3)
    end)
    
    xlua.hotfix(CS.TestXlua,'ChangeColor',function(self)
    	if self.obj~=nil then
    	   self.obj:GetComponent('MeshRenderer').material.color =CS.UnityEngine.Color.blue;
    
    	end
    end)

    要修的两个方法。

    每次修改C#代码要重新生成代码,注入。如果不想每次都去生成,可以考虑先不开启宏,等发布的时候在开启。

    这里说明一下,如果只开启一个宏HOTFIX_ENABLE,在unity编辑器下是没问题的,可以生成也可以注入。但是发布到移动端就会出现问题,在切换到安卓端之后,运行就会报错

    LuaException: xlua.access, no field __Hotfix0_Update
    stack traceback:
        [C]: in field 'access'
        [string "Init"]:88: in field 'hotfix'

    所以还要开启一个宏: INJECT_WITHOUT_TOOL,采用内嵌到编辑器的方式注入。添加了该宏之后,在菜单栏XLUA里才能够进行【Hotfix inject in Editor】的操作;

    之后再次打包到移动端,测试没问题

    展开全文
  • 最近好多小伙伴问到冒泡排序如何写,忍不住上网查了一下,发现网上的资料大多只代码呈现,但是并没有数学逻辑。其实这种代码,你首先要把数学逻辑弄懂了,然后再去转化计算机语言,只要懂相关语言的语法,不管...

    最近好多小伙伴问到冒泡排序如何写,忍不住上网查了一下,发现网上的资料大多只讲了代码呈现,但是并没有讲数学逻辑。其实这种代码,你首先要把数学逻辑弄懂了,然后再去转化计算机语言,只要懂相关语言的语法,不管怎么变语言,逻辑都不变。下面正式开始我们的主题。

    1.冒泡排序的算法逻辑:

    注:关键字是相邻元素,即冒泡排序是只针对2个挨着的元素比较的。然后每一趟找出最大的数。

    2.数学逻辑

    给你9个数,分别为:55,44,11,77,66,99,88,33,22。

    0趟:

    第0次:   44,55,11,77,66,99,88,33,22           (44和55比较,55大于44,故这2个调位置)
    第1次:   44,11,55,77,66,99,88,33,22            ( 55和11比较,55大于11,故这2个调位置)
    第2次:   44,11,55,77,66,99,88,33,22            ( 55和77比较 ,55<77,故位置不变)
    第3次:   44,11,55,66,77,99,88,33,22           (77和66比较,77大于66,故这2个调位置)
    第4次:   44,11,55,66,77,99,88,33,22           (77和99比较,77<99,故位置不变)
    第5次:   44,11,55,66,77,88,99,33,22           (99和88比较,99大于88,故这2个调位置)
    第6次:   44,11,55,66,77,88,33,99,22           (99和33比较,99大于33,故这2个调位置)
    第7次:   44,11,55,66,77,88,33,22,99           (99和22比较,99大于22,故这2个调位置)
    结果最大的99排在最后,第0趟结束,一共比较了8次

    注:此次最大的已经在最后了,故以后不再比较99了。

    1趟:

    第0次:  11,44,55,66,77,88,33,22,99          (44和11比)
    第1次:  11,44,55,66,77,88,33,22,99          (44和55比)
    第2次:  11,44,55,66,77,88,33,22,99          (55和66比)
    第3次:  11,44,55,66,77,88,33,22,99          (66和77比)
    第4次:  11,44,55,66,77,88,33,22,99          (77和88比)
    第5次:  11,44,55,66,77,33,88,22,99           (88和33比)
    第6次:  11,44,55,66,77,33,22,88,99           (88和22比)
    结果88和99占据高位,第1趟比较结束,一共比较了7次

    注:此次88排在倒数第二位,此后88和99不再参加比较了。

    2趟:

    第0次:  11,44,55,66,77,33,22,88,99           (11和44比较)
    第1次:  11,44,55,66,77,33,22,88,99          (44和55比较)
    第2次:  11,44,55,66,77,33,22,88,99          (55和66比较)
    第3次:  11,44,55,66,77,33,22,88,99          (66和77比较)
    第4次:  11,44,55,66,33,77,22,88,99          (77和33比较)
    第5次:  11,44,55,66,33,22,77,88,99          (77和22比较)

    结果77,88,99占据高位,第2趟比较结束,一共比较6次

    注:此次77排在倒数第三位,此后77,88,99不再参加比较了。

    3趟:

    第0次:   11,44,55,66,33,22,77,88,99          (11和44比较)
    第1次:   11,44,55,66,33,22,77,88,99          (44和55比较)
    第2次:   11,44,55,66,33,22,77,88,99          (55和66比较)
    第3次:   11,44,55,33,66,22,77,88,99          (33和66比较)
    第4次:   11,44,55,33,22,66,77,88,99          (66和22比较)
    结果66,77,88,99占据高位,第3趟比较结束,一共比较5次

    注:此次66排在倒数第四位,此后66,77,88,99不再参加比较了。

    4趟:

    第0次:    11,44,55,33,22,66,77,88,99         (11和44比较)
    第1次:    11,44,55,33,22,66,77,88,99         (44和55比较)
    第2次:    11,44,33,55,22,66,77,88,99         (55和33比较)
    第3次:    11,44,33,22,55,66,77,88,99         (22和33比较)
    结果55,66,77,88,99占据高位,第4趟比较结束,一共比较4次

    注:此次55排在倒数第四位,此后55,66,77,88,99不再参加比较了。

    5趟:

    第0次:     11,44,33,22,55,66,77,88,99          (11和44比较)
    第1次:     11,33,44,22,55,66,77,88,99          (44和33比较)
    第2次:     11,33,22,44,55,66,77,88,99          (44和22比较)
    结果44,55,66,77,88,99占据高位,第,5趟比较结束,一共比较3次

    注:此次44排在倒数第五位,此后44,55,66,77,88,99不再参加比较了。

    6趟:

    第0次:     11,33,22,44,55,66,77,88,99           (11和33比较)
    第1次:     11,22, 33,44,55,66,77,88,99            (33和22比较)
    结果33,44,55,66,77,88,99占据高位,第6趟比较结束,一共比较2次

    注:此次33排在倒数第六位,此后33,44,55,66,77,88,99不再参加比较了。

    7趟:

    第0次:       11,22, 33,44,55,66,77,88,99           (11和22比较)
    结果22,33,44,55,66,77,88,99占据高位,第7趟比较结束,一共比较1次。

    至此只剩下11一个数了,没得比了,其他元素都比它大,在自己位置乖乖呆着就是了,所以冒泡结束。

    总结:上面红色的趟数就是我们第几轮对目前这一排数字进行相邻元素排序,每趟里面的次数代表相邻2个元素比较,每两个元素一比较算一次。

    3.代码逻辑转换:

    可以从第2步里面分析发现,主要是对几趟进行第几次的相邻2个元素比较,如果前面的数大于后面的数,则这2个位置互换,否则位置不变。

    主要是2个值起作用,一个是第几趟,另一个是第几次,而第几次又是与第几趟关联的。故用i来表示第几趟,用j来表示第几次,发现i的取值为从0到n-2。

    可以发现j的最大值是与i有关联的,即i+j的最大值为n-2。(n为长度)

    4.代码呈现:

    C语言:

     

    运行结果:

     

    注:此处我用的LR工具编译的,可能别的编译器会有所不同,基本思路一样。

    图中的9就是这个元组的长度,lr中自定义函数一般放在action下面的。

    python语言:

     

    运行结果:

    注:此处使用的pycharm工具编译的,其他工具方法应该类似。

    到次冒泡结束。

     

     

    转载于:https://www.cnblogs.com/hindy/p/8717680.html

    展开全文
  • 想要学好python,基础语句的学习是必不可少的。python语句比较多,最老生常谈有for和while,这个我们之前的比较多。...只有多个条件都满足,才能够执行后续代码,这个时候需要使用到逻辑运算符。逻辑运算符...

    想要学好python,基础语句的学习是必不可少的。python语句比较多,最老生常谈有for和while,这个我们之前讲的比较多。当然if语句也是很大的一个模块,包含的知识点和其他运算符的联系也很多。比如我们今天要提到的逻辑运算符就和if可以一起使用,一起看看吧。

    在程序开发中,通常在判断条件时,会需要同时判断多个条件。

    只有多个条件都满足,才能够执行后续代码,这个时候需要使用到逻辑运算符。

    逻辑运算符可以把多个条件按照逻辑进行连接,变成更复杂的条件。

    Python中的逻辑运算符包括:与and/或or/非not三种。

    一、and(与/并且)

    条件1 and 条件2

    两个条件同时满足,返回 True,只要有一个不满足,就返回False。

    实例:age = 100

    # 要求人的年龄在 0-120 之间

    if age >= 0 and age <= 120:

    print("年龄正确")

    else:

    print("年龄不正确")

    二、or(或/或者)

    条件1 or 条件2

    两个条件只要有一个满足,返回 True,两个条件都不满足,返回False。

    实例:python_score = 50

    c_score = 50

    # 要求只要有一门成绩 > 60 分就算合格

    if python_score > 60 or c_score > 60:

    print("考试通过")

    else:

    print("再接再厉!")

    三、 not(非/不是)

    not 条件

    实例:is_employee = True

    # 如果不是提示不允许入内

    if not is_employee:

    print("非公勿入")

    以上就是python if在逻辑运算符中的用法。更多Python学习推荐:JQ教程网Python大全。

    展开全文
  • 先看下面的图,已知平面上分布的红点和蓝点,逻辑回归算法就是解决怎么根据一系列点,计算出一条直线(或者是平面)将平面上的点分成两类,一般的解决方法就是建立一个数学模型,然后通过迭代优化得到一个最优...

    什么是逻辑回归?

    首先逻辑回归是一种分类算法,然后也是一种监督学习方法。逻辑回归是一种监督学习方法,也就是说逻辑回归问题的数据集都是带标签的。以二维平面点集为例:数据集的坐标x1(横坐标),x2(纵坐标)都叫数据集的特征,这里的x2(为了不和后面的y弄混,我们用x2表示)不是标签,对于逻辑归回解决的分类问题,标签是这个数据属于的类别,如果是二分问题,用{1,0}表示类别,那标签就是1或者是0。
    逻辑回归算法和预测类算法中的线性回归算法有一定的类似性。简单来讲,逻辑回归,就是通过回归的方法来进行分类,而不是进行预测,比如预测房价等。

    逻辑回归解决的问题

    先看下面的图,已知平面上分布的红点和蓝点,逻辑回归算法就是解决怎么根据一系列点,计算出一条直线将平面上的点分成两类,一般的解决方法就是建立一个数学模型,然后通过迭代优化得到一个最优值,然后根据这个值来计算这条直线。
    在这里插入图片描述

    问题的转化

    既然是二分问题,我们希望输入一个数,输出为y∈{0,1},这样就能将样本点映射到两个不用的类别中。具体方法就是计算每个点属于类别“1”或者属于类别“0”的概率,哪个概率大,这个点就属于哪一类,那么这个问题就转化成了怎么计算每个点属于“1”或者“0”的概率

    激活函数

    如图所示是激活函数的式子和图像。该函数也可以叫做概率函数,横坐标是输入的值,纵坐标是概率值,当概率值小于0.5时,y=0,当概率值大于0.5时,y=1。那输入的值又是什么呢?以一个二维数据点(X1,X2)为例,这个值就是z=W1×X1+W2×X2+W3。其中W3是平移项,用行向量矩阵表示X=[X1,X2, 1], W=[W1, W2, W3]
    在这里插入图片描述
    这里的权重W如果确定了,那这个逻辑回归问题也就解决了。所以我们的问题转化成了求解权重系数W=[W1, W2, W3]的问题。
    需要注意的是,激活函数中的z值并不是二维数据点的纵坐标值,而是z=W1×X1+W2×X2+W3计算得来的。
    在这里插入图片描述
    在这里插入图片描述

    极大似然估计法

    计算概率的问题解决了,然后就是建立损失函数(目标函数),然后根据目标函数使用梯度下降法求解W,该问题就解决了。说到底,这还是一个最优化的问题,更准确的讲是一个无约束优化问题。
    一般性假设激活函数φ(z)是计算数据点属于“1”的概率,则:
    在这里插入图片描述
    将两个式子综合来,可以改写为下式:
    在这里插入图片描述
    上式将分类为0和分类和1的概率计算公式合二为一。假设分类器分类足够准确,此时对于一个样本,如果它是属于1类,分类器求出的属于1类的概率应该尽可能大,即p(y=1lx)尽可能接近1;如果它是0类,分类器求出的属于0类的概率应该尽可能大,即p(y=0lx)尽可能接近1。
    通过上述公式对二类分类的情况分析,可知我们的目的是求取参数w,使得p(ylx)对0类和1类的分类结果尽可能取最大值,然而实际上我们定义的损失函数的是求最小值,于是,很自然的,我们想到对p(ylx)式子加一个负号,就变成了求最小值的问题,这就得到了逻辑回归中的损失函数

    不过,为了计算方便,我们通常对上述式子取log,因而得到下式:
    在这里插入图片描述
    在这里插入图片描述
    对每个数据点进行累加,得到最终的损失函数(目标函数),也是对数似然函数
    在这里插入图片描述
    然后对上述函数使用梯度下降法进行求解就得到了权重系数w。

    梯度下降法

    激活函数有如下等式成立。
    在这里插入图片描述
    基于上式对损失函数进行求导数:
    在这里插入图片描述
    设步长(学习速率)为η,权重系数w的迭代式为:
    在这里插入图片描述

    模型的测试

    机器学习算法中的监督学习算法有个共同点,先用带标签的数据集进行学习,然后使用不带标签的数据集进行测试。训练数据集和测试数据集不能重复。

    完整的逻辑回归python3源代码下载地址:
    https://download.csdn.net/download/u014571489/10751551 (无测试部分代码和数据集)
    https://download.csdn.net/download/u014571489/10753587 (添加了测试部分的代码和数据集)
    在这里插入图片描述

    逻辑回归算法的不足

    逻辑回归算法只能解决二分类问题,逻辑回归扩展后的softmax Regression算法也只能解决线性可分问题。对于非线性可分问题,为了能够利用逻辑回归通常有两种方法(1)利用人工对特征进行处理,如使用核函数对特征进行处理,变成线性可分。但是人工的特征处理需要有一些领域的知识,难度比较大。(2)对基本的逻辑回归算法进行扩展,以适应更难的分类问题。

    技术问题可以加QQ:739099538,加好友请备注CSDN。
    您的小小支持是我持续前进的巨大动力!
    在这里插入图片描述

    展开全文
  • 来自公众号:小生方勤前言...由于内部代码不适合分享,这里我就用 来讲讲逻辑判断优化的一些方案。这里先声明,免有人疑惑:我们在项目中使用的很可能会有多层的嵌套,不像我的例子只有一层。不过其优化的思想是大...
  • 你有没有试过,在聚精会神地处理逻辑比较复杂的代码的时候,被别人中断了,思绪一下子乱了。根本没法接着往下走,需要重新整理一遍逻辑。程序员的工作是脑力劳动,工作被中断会导致效率极其低下。其他岗位的同事会...
  • 关键词:分治、UOP本文约 4500 字,建议阅读时间 12 分钟引子我们知道,分治策略是人们解决问题的一种基本策略。问题规模越大,内部包含的差异化的细节...本文基于 Android 客户端开发中经常涉及的交互逻辑编程展开...
  • 最近小编的项目中存在很多...原则上来,数据库最好处理简单的存数和取数的逻辑,不建议作为一个业务逻辑处理地方。存储过程导致了业务代码逻辑既分散在数据库中,又分散在中台的java代码中,给项目的维护带来的...
  • 想要学好python,基础语句的学习是必不可少的。python语句比较多,最老生常谈有for和while,这个我们之前的比较多。...只有多个条件都满足,才能够执行后续代码,这个时候需要使用到逻辑运算符。逻辑运算符...
  • 怎么样运行/调试你的PHP代码

    千次阅读 2018-08-25 11:55:02
    本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调试分三种,注意我所的是调试并非测试 功能调试 组件调试 片段调试 功能调试是指在完成一个功能或者正在完成功能的过程中进行的错误、逻辑、结果的...
  • 前言 React hook已经出来...但是对于一些组件相同逻辑的处理,一直做得不太到位,于是乎总是会在类似的组件里写很多重复的代码,所以在看hookAPI的时候也是带着对以往的思考与审视,希望能从中找到好的解决方式。...
  • 话不多说,继续学习注册页面的业务逻辑:昨天编写了前端校验的代码,是为了保证数据的完整性和合法性:比如用户名密码不能为空。比如电话号码不能瞎填,格式要正确。今天学习后台校验,为了保证数据的唯一性:比如...
  • 下面是线上机器的cpu使用率,可以看到从4月8日开始,...查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。 首先联系了内部下游系统观察了他们的监控,发现一起正常。可以排除下游系统故障对我们的影响。
  • 朋友指着自己写的代码问:你看我的代码写的怎么样,有没有问题...以最宽松的标准,只要代码没有逻辑错误,没有严重性能问题,就没有问题,但我知道,他问得不是这些,而是问代码有没有可以更进一步优化的可能,我...
  • Java中的逻辑结构

    2021-04-16 13:04:31
    顺序结构顾名思义,就是按照代码的顺序依次往下执行,这个不必多 分支结构 分支结构又可以细分为两个: if…else…这两个单词相信都认识,翻译成中文就是我们平时所说的如果…就…,那么在Java中该怎么用呢: ①...
  • 【回顾:Python编程第5课作业答案】第1题:D 第2题:sum= 17 第3题:第1行补充“sum=0”,第5行补充“sum=sum+i”你...在代码源文件中,为每个主要的代码段添加注释,解释代码的基本逻辑。最好注明程序的构建和修改...
  • 重构 - 代码优化技巧

    2019-11-11 18:00:51
    复杂性守恒原则:无论你怎么代码,复杂性都是不会消失的 推论:如果逻辑很复杂,那么代码看起来就应该是复杂的。如果逻辑很简单,代码看起来就应该是简单的。 命名 程序员三大难题 变量命名 缓存失效 循环边界.....
  • 今天就其中的逻辑及要注意的事情。文字图片、图片水印的效果图如今,新浪微博站内应用平台开放,吸引了很多开发者,下面是开发者的app应用中的效果图。功能具体实现php GD库和image函数是我们要用到的,掌握...
  • 正如前面所,主分区是由主引导扇区中64字节的分区表所定义的,最多只能有4个。但为了满足更多分区的需求,变产生了扩展分区。形式上,如果拥有扩展分区,就必须牺牲一个主分区,而且最多有一个扩展分区,也就是说...
  • 分为5个方向:系统本身代码问题内部下游系统的问题导致的雪崩效应上游系统调用量突增http请求第三方的问题机器本身的问题2、开始排查查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。首先联系了内部...
  • 代码混淆就是保持代码逻辑不变的情况下搞得别人就算拿到你的代码也看不懂。一来是加大别人反编译你打出来的包后对你的代码的理解程度,或者要把代码发给别人时不想让他们看懂代码。 一般java、Object-c、python...
  • 就算是一个个对象,它也不是静止的,它的内部也是由不同分子原子发生作用的结果,可以对象也是一个关系体。 软件是用来对世界进行描述的一种方式,最初我们采用过程的编程,后来与世界的描述不相符,所以就出现了...
  • DRY 原则(Don’t Repeat Yourself)实现逻辑重复功能语义重复代码执行重复代码复用性(Code Reusability)怎么提高代码复用性?辩证思考和灵活应用重点回顾课堂讨论 在上一节课中,我们了 KISS 原则和 YAGNI 原则...
  • 代码整洁之道(一)

    2018-12-21 12:48:10
    每次写完需求后,我都会去跟大佬报告下进度,并邀请大佬是否愿意查看下我的代码,每次大佬看代码的时候,我都会跟他描述每一段的逻辑。然后大佬就会在结束的时候跟我说哪一块怎么写着整洁,或者前端页面的数据结构...
  • 本着按这些技术本身的框架写就好,不用管其他,怎么方便怎么来的思维,最后带来的后果就是代码只有自己看的懂,一处修改处处bug,不利于多人协作,代码逻辑不清等各种常见问题,鉴于这些原因笔者还是想着大胆的提出...
  • Java集成Weka做逻辑回归(Logistic Regression)从搜索引擎脑补可以得知,“逻辑回归”是一种分类器,通过样本集合的训练之后,...网络上很多blog的都是用Weka工具怎么操作,也有一些代码,但奇怪似乎没有人提到wek...
  • Android View底层到底是怎么绘制的

    千次阅读 2016-08-11 12:39:59
    但是,这只是一个大体的流程,而我们需要探讨的是Android在我们调用setcontentView()之后,系统给我们干了什么事情,这个完整的逻辑是什么样的,却很少有人,还是先看下系统代码吧。 public void setCont

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530
精华内容 212
关键字:

代码逻辑怎么讲