精华内容
下载资源
问答
  • 2021的第一个小目标:软考高级

    万次阅读 多人点赞 2021-04-12 10:28:46
    虽然逝去的时光自己也努力,但总感觉没有全身心投入做好几件重要而不紧急的事情。对之前的时间进行回顾和分析,主要发现事情多而杂,频繁的产生中断,所以无法达到专注。   专注是非常重要的。不仅对于我们个人...

      时光荏苒,2021已经过去了1/3。虽然逝去的时光自己也算努力,但总感觉没有全身心投入做好几件重要而不紧急的事情。对之前的时间进行回顾和分析,主要发现事情多而杂,频繁的产生中断,所以无法达到专注。

      专注是非常重要的。不仅对于我们个人成长来说,专注是成功的必要条件,郭靖之所以能够练成绝世武功,很大程度上就是因为专注(虽然他的专注一部分是由于"愚笨"导致)。
    在这里插入图片描述
      对于机器学习来说,而是非常重要的。在自然语言处理领域中大杀四方的BERT模型,其核心部分是自注意力机制,本质上也是专注。
    在这里插入图片描述
      作为一名资深的算法工程师(年近30),也得为未来做点打算和考虑。经过深入思考和研究,就确定了今年的第一个小目标:软考高级(信息系统项目管理师)。考取了软考高级资格证书可以帮助评副高级职称。如果成功考取,就会给未来增加更多的机会。通过软考高级,就可以通过人才引进的方式帮助在一线城市落户、领取人才补贴等等。

      为了帮助更多备考的同学,后续博文会对复习重点内容进行免费系列分享,敬请关注。

      准备考试第一步,就是买一本官方教材,如下图所示:

      大家2021年还有什么目标吗?欢迎留言分享。一起加油进步。

      文章最后给自己打个广告。先做个自我介绍:我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池安全恶意程序检测第一名,科大讯飞阿尔茨海默综合症预测挑战赛第四名,科大讯飞事件抽取挑战赛第七名,Datacon大数据安全分析比赛第五名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法行业就业。希望和大家一起成长进步。以下几个专栏欢迎大家订阅学习:

    AI比赛经验分享

    https://blog.csdn.net/herosunly/category_9393702.html

    机器学习入门之工具篇

    https://blog.csdn.net/herosunly/category_10457626.html

    爬虫实战
    https://blog.csdn.net/herosunly/category_10748674.html

    展开全文
  • iOS 自带了控件,可以自动根据日历来计算 2 个时间相差的自然年、月、日、小时、分钟、秒。Java 没有自带此方法,只能自己来了~ 一、竖式减法实现 我自己写了一个方法,测试了一些时间和 iOS 作对比,暂时...

    iOS 自带了控件,可以自动根据日历来计算 2 个时间相差的自然年、月、日、小时、分钟、秒。Java 没有自带此方法,只能自己来算了~

    一、竖式减法实现

    我自己写了一个方法,测试了一些时间和 iOS 作对比,暂时没有发现什么问题。如有错误,欢迎指正,也欢迎提意见~

    源码见:TimeIntervalUtils.java

    主要方法是 int[] getTimeIntervalArray(Calendar nextDate, Calendar previousDate) 。

    主要思路是:

    根据数学的竖式减法,从低位由 "秒→年" 依次进行减法计算,不够则向前借一位。

    这里先分别将 [年, 月, 日, 小时, 分钟, 秒] 每一位的差值计算出来,然后从低位开始由 "秒→年" 依次判断:如果小于 0 ,则向前借一位,当前位补上对应的值,前一位则需要减1。

    补值这里应该也好理解:"秒"、"分"补 60,"时"补 24,"月"补 12

    需要注意的是 "",也就是"天数"的处理。因为是按照日历上的日期来计算的日期差值,所以需要考虑到月份的问题,每个月的天数是不一样的,那么补值也是不一样的。每个月的天数可能有28、29、30、31天,这里我是按照截止日期 nextDate 的上一个月的天数来作补值的。比如 nextDate 是 20160229,那么上个月是 1 月份,补值是 31 天。

    /**
     * 获取 2 个时间的自然年历的时间间隔
     *
     * @param nextDate     后面的时间,需要大于 previousDate
     * @param previousDate 前面的时间
     * @return [年, 月, 日, 小时, 分钟, 秒]的数组
     */
    public static int[] getTimeIntervalArray(Calendar nextDate, Calendar previousDate) {
        int year = nextDate.get(Calendar.YEAR) - previousDate.get(Calendar.YEAR);
        int month = nextDate.get(Calendar.MONTH) - previousDate.get(Calendar.MONTH);
        int day = nextDate.get(Calendar.DAY_OF_MONTH) - previousDate.get(Calendar.DAY_OF_MONTH);
        int hour = nextDate.get(Calendar.HOUR_OF_DAY) - previousDate.get(Calendar.HOUR_OF_DAY);// 24小时制
        int min = nextDate.get(Calendar.MINUTE) - previousDate.get(Calendar.MINUTE);
        int second = nextDate.get(Calendar.SECOND) - previousDate.get(Calendar.SECOND);
    
        boolean hasBorrowDay = false;// "时"是否向"天"借过一位
    
        if (second < 0) {
            second += 60;
            min--;
        }
    
        if (min < 0) {
            min += 60;
            hour--;
        }
    
        if (hour < 0) {
            hour += 24;
            day--;
    
            hasBorrowDay = true;
        }
    
        if (day < 0) {
            // 计算截止日期的上一个月有多少天,补上去
            Calendar tempDate = (Calendar) nextDate.clone();
            tempDate.add(Calendar.MONTH, -1);// 获取截止日期的上一个月
            day += tempDate.getActualMaximum(Calendar.DAY_OF_MONTH);
    
            // nextDate是月底最后一天,且day=这个月的天数,即是刚好一整个月,比如20160131~20160229,day=29,实则为1个月
            if (!hasBorrowDay
                    && nextDate.get(Calendar.DAY_OF_MONTH) == nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)// 日期为月底最后一天
                    && day >= nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)) {// day刚好是nextDate一个月的天数,或大于nextDate月的天数(比如2月可能只有28天)
                day = 0;// 因为这样判断是相当于刚好是整月了,那么不用向 month 借位,只需将 day 置 0
            } else {// 向month借一位
                month--;
            }
        }
    
        if (month < 0) {
            month += 12;
            year--;
        }
    
        return new int[]{year, month, day, hour, min, second};
    }

    重点讲一下 day < 0 的情况。

    if (day < 0) {
        // 计算截止日期的上一个月有多少天,补上去
        Calendar tempDate = (Calendar) nextDate.clone();
        tempDate.add(Calendar.MONTH, -1);// 获取截止日期的上一个月
        day += tempDate.getActualMaximum(Calendar.DAY_OF_MONTH);
    
        // nextDate是月底最后一天,且day=这个月的天数,即是刚好一整个月,比如20160131~20160229,day=29,实则为1个月
        if (!hasBorrowDay
                && nextDate.get(Calendar.DAY_OF_MONTH) == nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)// 日期为月底最后一天
                && day >= nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)) {// day刚好是nextDate一个月的天数,或大于nextDate月的天数(比如2月可能只有28天)
            day = 0;
        } else {// 向month借一位
            month--;
        }
    }

    这里需要注意一下: 什么情况下刚好算作日历上的一整个月呢?

    (1)这里拿 2 月份来举个栗子。比如 2016 年 2 月有 29 天,① "20160129~20160229"、② "20160130~20160229"、③ "20160131~20160229",这 3 个时间段的差值结果分别是 31 天、30天、29天,但按自然月算其实都是 "1 个月" 。① 按照我们平常的普通算法直接"年-月-日"相减,刚好是 1 个月,③ 按照日历上的日期,也是刚好 1 个月。这种情况,是 nextDate 刚好是月底最后一天 2 月29 号,如果 previousDate 是在 29 号~31 号之间,并且 hasBorrowDay = false 没有借位,那么都是算作整月的。

    nextDate 非月底的情况,如 "20160127~20160225" 是 29 天,"20160129~20160228" 是 30 天,计算结果则只显示天数,不会显示为 1 个月了。

    (2)如果你还需要计算 时分秒 的差值,那么这里还要注意一点,如果 "时" 向 "天" 借了一位,会影响 "天" 的计算的(是否是刚好 1 个月,或者是否需要向 "月" 借位)。所以在 hour < 0 时添加了一个标识 hasBorrowDay = true 表示 "天" 被借了一位。

    举个栗子:"2016-01-30 01:59:59 ~ 2016-02-29 00:59:59"。

    我们来进行竖式减法运算, "[]" 内的顺序为 [year, month, day, hour, minute, second],以英文标识。

      2016-02-29 00:59:59

    - 2016-01-30 01:59:59

    ------------------------------

    ①     [0, 1, -1, -1, 0, 0]

    ②     [0, 1, -2, 23, 0, 0]

    ③     [0, 0, 29, 23, 0, 0]

    ① 分别计算 [year, month, day, hour, minute, second] 的差值,得到: [0, 1, -1, -1, 0, 0];

    ② 因为 hour = -1 < 0,需要向 day 借一位来补值,补值为 24,hour = -1 + 24 = 23;

    day 被借位了,需要自减 1,day = -1 -1 = -2, 并标识 hasBorrowDay = true ;得到:[0, 1, -2, 23, 0, 0];

    ③ 因为 day = -2 < 0,需要向 month 借一位来补值。2016-02-29 的上一个月是 1 月份 有 31 天,所以补值为 31,day = -2 + 31 = 29;

    这里,hasBorrowDay = true,所以 month 被借位了需要自减 1 ,month = 1 - 1 = 0;得到:[0, 0, 29, 23, 0, 0];

    ④ 最后结果为 [0, 0, 29, 23, 0, 0],即 29 天 23 小时。

    和 iOS 的结果一致(见下图)。

    那如果我们没有标识 hasBorrowDay = true 会有什么影响呢?

    回到第 ③ 步,我们让 hasBorrowDay 一直为 false:

    因为 day = -2 < 0,需要向 month 借一位来补值。2016-02-29 的上一个月是 1 月份 有 31 天,所以补值为 31,day = -2 + 31 = 29;

    2016-02-29是月底最后一天,所以 

    nextDate.get(Calendar.DAY_OF_MONTH) == nextDate.getActualMaximum(Calendar.DAY_OF_MONTH) //为真

    day = 29,而 2 月份正好只有 29 天,所以

    day >= nextDate.getActualMaximum(Calendar.DAY_OF_MONTH) //为真

    那么按照这个逻辑:

    if (!hasBorrowDay
            && nextDate.get(Calendar.DAY_OF_MONTH) == nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)// 日期为月底最后一天
            && day >= nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)) {// day刚好是nextDate一个月的天数,或大于nextDate月的天数(比如2月可能只有28天)
        day = 0; // 会执行此步,因为这样判断是相当于刚好是整月了,那么不用向 month 借位,只需将 day 置 0
    } else {// 向month借一位
        month--;
    }

    day 被置 0 了,最后得到的结果是:[0, 1, 0, 23, 0, 0],即 1 个月 23 小时。这样和日历上的自然时间就不是很符合了。

    -------------------------------------------------------------分析完毕-----------------------------------------------------

    gist 可能打不开(墙),这里附上整个类的源码:

    package com.test.Utils;
    
    import android.text.TextUtils;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;
    
    /**
     * desc   : 获取时间间隔
     * version:
     * date   : 2018/8/7
     * author : DawnYu
     * GitHub : DawnYu9
     */
    public class TimeIntervalUtils {
        /**
         * 获取当前时间
         *
         * @param template 时间格式,默认为 "yyyy-MM-dd HH:mm:ss"
         * @return
         */
        public static String getCurrentDateString(String template) {
            if (TextUtils.isEmpty(template)) {
                template = "yyyy-MM-dd HH:mm:ss";// 大写"HH":24小时制,小写"hh":12小时制
            }
    
            SimpleDateFormat formatter = new SimpleDateFormat(template, Locale.getDefault());
    
            System.out.println("getCurrentDateString = " + formatter.format(new Date()));
    
            return formatter.format(new Date());
        }
    
        /**
         * 获取 2 个时间的自然年历的时间间隔
         *
         * @param nextTime     后面的时间,需要大于 previousTime,空则默认为当前时间
         * @param previousTime 前面的时间,空则默认为当前时间
         * @param format       时间格式,eg:"yyyy-MM-dd", "yyyy-MM-dd hh:mm:ss"
         * @return [年, 月, 日, 小时, 分钟, 秒]的数组
         */
        public static int[] getTimeIntervalArray(String nextTime, String previousTime, String format) {
            SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.getDefault());
            Date nextDate;
            Date previousDate;
            Calendar nextCalendar = Calendar.getInstance();
            Calendar previousCalendar = Calendar.getInstance();
    
            // 空则取当前时间
            try {
                nextDate = dateFormat.parse(TextUtils.isEmpty(nextTime) ? getCurrentDateString(format) : nextTime);
                nextCalendar.setTime(nextDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
            // 空则取当前时间
            try {
                previousDate = dateFormat.parse(TextUtils.isEmpty(previousTime) ? getCurrentDateString(format) : previousTime);
                previousCalendar.setTime(previousDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
            return getTimeIntervalArray(nextCalendar, previousCalendar);
        }
    
        /**
         * 获取 2 个时间的自然年历的时间间隔
         *
         * @param nextDate     后面的时间,需要大于 previousDate
         * @param previousDate 前面的时间
         * @return [年, 月, 日, 小时, 分钟, 秒]的数组
         */
        public static int[] getTimeIntervalArray(Calendar nextDate, Calendar previousDate) {
            int year = nextDate.get(Calendar.YEAR) - previousDate.get(Calendar.YEAR);
            int month = nextDate.get(Calendar.MONTH) - previousDate.get(Calendar.MONTH);
            int day = nextDate.get(Calendar.DAY_OF_MONTH) - previousDate.get(Calendar.DAY_OF_MONTH);
            int hour = nextDate.get(Calendar.HOUR_OF_DAY) - previousDate.get(Calendar.HOUR_OF_DAY);// 24小时制
            int min = nextDate.get(Calendar.MINUTE) - previousDate.get(Calendar.MINUTE);
            int second = nextDate.get(Calendar.SECOND) - previousDate.get(Calendar.SECOND);
    
            boolean hasBorrowDay = false;// "时"是否向"天"借过一位
    
            if (second < 0) {
                second += 60;
                min--;
            }
    
            if (min < 0) {
                min += 60;
                hour--;
            }
    
            if (hour < 0) {
                hour += 24;
                day--;
    
                hasBorrowDay = true;
            }
    
            if (day < 0) {
                // 计算截止日期的上一个月有多少天,补上去
                Calendar tempDate = (Calendar) nextDate.clone();
                tempDate.add(Calendar.MONTH, -1);// 获取截止日期的上一个月
                day += tempDate.getActualMaximum(Calendar.DAY_OF_MONTH);
    
                // nextDate是月底最后一天,且day=这个月的天数,即是刚好一整个月,比如20160131~20160229,day=29,实则为1个月
                if (!hasBorrowDay
                        && nextDate.get(Calendar.DAY_OF_MONTH) == nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)// 日期为月底最后一天
                        && day >= nextDate.getActualMaximum(Calendar.DAY_OF_MONTH)) {// day刚好是nextDate一个月的天数,或大于nextDate月的天数(比如2月可能只有28天)
                    day = 0;// 因为这样判断是相当于刚好是整月了,那么不用向 month 借位,只需将 day 置 0
                } else {// 向month借一位
                    month--;
                }
            }
    
            if (month < 0) {
                month += 12;
                year--;
            }
    
            return new int[]{year, month, day, hour, min, second};
        }
    }
    

    测试代码:

    /**
     * 测试时间间隔
     */
    private void testTimeInterval() {
        String nextTime = "2016-02-29 00:59:59";
        String preTime = "2016-01-30 01:59:59";
        String format = "yyyy-MM-dd hh:mm:ss";
    
        System.out.println("----------------------\n"
                + "nextTime = " + nextTime + "\n"
                + "preTime  = " + preTime + "\n"
                + Arrays.toString(TimeIntervalUtils.getTimeIntervalArray(nextTime, preTime, format)) + "\n"
                + "----------------------");
    }

    部分测试结果和 iOS 对比:

     

    二、 Period 类(Java 8,Android 8.0 以上)

    参考博客:Java计算时间差、日期差总结

    现在 Java 8 中有一个周期类 Period ,Android 需要 API level 26 以上,即 8.0 以上系统才可以使用 Period 。但是 Period 只支持计算 "年、月、日" 的差值,而且和 iOS 的算法也不太一样。

    在 Period 的源码注释里可以看到其只能计算 "年、月、日" 的差值。

    测试代码:

    public void testTimeIntervalByPeriod() {
        LocalDate nextDate = LocalDate.of(2016, 2, 29);
        LocalDate preDate = LocalDate.of(2016, 1, 31);
    
        Period p = Period.between(preDate, nextDate);
    
        Log.i("testTimeIntervalByPeriod",
                "-------\n"
                        + "nextDate:" + nextDate + "\n"
                        + "preDate: " + preDate + "\n"
                        + "Period 时间差:" + p.getYears() + " 年 " + p.getMonths() + " 月 " + p.getDays() + " 天 ");
    }

    测试结果:

    可见,Period 并没有按照日历来计算,只是单纯地做了减法。。

     

    展开全文
  • 自然对数

    千次阅读 2017-02-17 11:28:25
    以常数e为底数的对数叫做自然对数,记作lnN(N>0)。自然对数在物理学,生物学等自然科学中有重要的意义。 中文名自然对数 外文名Natural logarithm类 别数学 目录 1数学表示方法2概念▪有关概念...
    以常数e为 底数的对数叫做自然 对数,记作lnN(N>0)。自然对数在物理学,生物学等自然科学中有重要的 意义
    中文名
    自然对数
    外文名
    Natural logarithm
    类    别
    数学

    数学表示方法

    编辑
    自然对数的一般表示方法为lnx。数学中也常见以logx表示自然对数。若为了避免与基为10的 常用对数lgx混淆,可用“全写”㏒ex。 [1]  

    概念

    编辑
    它的含义是单位时间内,持续的翻倍增长所能达到的 极限

    有关概念

    自然对数的底数 e是由一个重要 极限给出的。我们定义:当 n趋于无限时,
    .
    e是一个 无限不循环小数,其值约等于2.718281828459…,它是一个 超越数

    对数函数

    当自然对数
    真数为连续 自变量时,称为 对数函数,记作
    x为自变量, y因变量).

    e的级数展开式

    易证明:函数展开为x的 级数(Maclaurin级数)是
    特别地,当x=1时就得到了e的展开式

    对数的生物学意义

    编辑
    在连锁交换定律中,重组率或重组值是指双杂合体测交产生的重组型配子的比例,即重组率=重组配子数/总配子数(亲组合+重组和)×100%,重组是交换的结果,所以重组率(recombination fraction)通常也称作交换率(crossing over percentage)或交换值。可是仔细推敲起来,这两个数值是不尽相同。
    如果我们假定,沿染色体纵长的各点上交换的发生大体上是随机确定的。那么可以这样认为,如果两个基因座相距很近,由交换而分开较少,重组率就低;如果两基因座离开很远,交换发生的次数较多,重组率就高。所以可以根据重组率的大小计算有关基因间的相对距离,把基因顺序地排列在染色体上,绘制出基因图。生物学家就是这样做的。
    如果有关的两个基因座在染色体上分开较远,举例说重组率在12%-15%以上,那么进行杂交试验时,其间可能发生双交换或四交换等更高数目的偶数交换,形成的配子却仍然是非重组型的。这时如简单地把重组率看作数交换率,那么交换率就要被低估了。因为遗传图是以1%交换率作为图距单位的,所以如交换率低估了,图距自然也随之缩小了,这就需要校正。校正的公式较多,可根据自己得出的连锁与交换试验的结果,提出单是适用于某一生物的校正公式。一般来说,一个合适的校正公式应该满足下列两个条件:①最大的重组率不超过0.5或50%,因为这数值说明两个基因之间遵循自由组合定律;②较小的重组率应该大致上是加性的。常用的的较简单的公式是Haldane推导的作图函数R=[1-e^(-2x)]/2,式中R代表重组率,x代表交换率。这公式表示重组率与图距的关系,而图距的单位是1%交换率。
    说明一下Haldane曲线的几点性质:①曲线的起始一小段基本上是直线,斜率接近于1,重组率可以直接看作是图距,所以重组率是加性的。②在曲线的曲度较大的区域,重组率就不是加性的了。当图距比较大,两端的基因的重组率就要小于相邻两个重组率之和,即Rab+Rbc>Rac,例如abc是三个连锁基因,两两间的重组率R值是非加性的,0.23+0.32>0.40。吧Haldane公式加以改写:x=-ln(1-2R)/2,把上面R值代入公式,求得x值如下:在0.31+0.51,稍大于0.81,x值大致上成为加性的了。③标记基因间的图距很大时,重组率与图距无关,接近或等于1/2。
    所以重组率大致代表交换率,但当重组率逐渐增大时,重组率往往小于交换率,需要加以校正。在实际应用时,要看研究的生物而定。像黑腹果蝇那样,各染色体上定位的基因已经很多,标记的区域已划分得很细,就无需用作图函数来校正了。但对一种新的生物开始进行连锁研究,可供利用的标记基因很少,这是最好用作图函数来加以校正,以得到更接近实际的图距。

    历史

    编辑
    约翰·纳皮尔在1614年以及Jost Bürgi(英语:Jost Bürgi)在6年后,分别发表了独立编制的 对数表,当时通过对接近1的底数的大量乘 运算,来找到指定范围和精度的 对数和所对应的真数,当时还没出现有理数幂的概念,1742年 William Jones(英语:William Jones (mathematician))才发表了幂指数概念。按后来人的观点,Jost Bürgi的底数1.0001相当接近自然对数的底数e,而约翰·纳皮尔的底数0.99999999相当接近1/e。实际上不需要做开高次方这种艰难运算,约翰·纳皮尔用了20年时间进行相当于数百万次乘法的计算,Henry Briggs(英语:Henry Briggs (mathematician))建议纳皮尔改用10为底数未果,他用自己的方法于1624年部份完成了 常用对数表的编制。
    形如f( x) = x的曲线都有一个代数反导数,除了特殊情况p = −1对应于双曲线的弓形面积(英语:Quadrature (mathematics)),即双曲线扇形;其他情况都由1635年发表的卡瓦列里弓形面积公式(英语:Cavalieri's quadrature formula)给出,其中抛物线的弓形面积由公元前3世纪的 阿基米德完成(抛物线的弓形面积(英语:The Quadrature of the Parabola)),双曲线的弓形面积需要发明一个新函数。1647年Grégoire de Saint-Vincent(英语:Grégoire de Saint-Vincent)将对数联系于双曲线xy=1的弓形面积,他发现x轴上[a,b]两点对应的双曲线线段与原点围成的双曲线扇形同[c,d]对应的扇形,在a/b=c/d时面积相同,这指出了双曲线从 x = 1到 x = t的积分 f( t)满足:
    1649年,Alphonse Antonio de Sarasa(英语:Alphonse Antonio de Sarasa)将双曲线下的面积解释为对数。大约1665年, 伊萨克·牛顿推广了 二项式定理,他将1/(1+x)展开并逐项积分,得到了自然对数的无穷级数。“自然对数”最早描述见于尼古拉斯·麦卡托在1668年出版的著作《Logarithmotechnia》中,他也独立发现了同样的级数,即自然对数的麦卡托级数。大约1730年, 欧拉定义互为逆函数的 指数函数和自然对数为:
    e在科学技术中用得非常多,一般不使用以10为底数的对数。以e为底数,许多式子都能得到简化,用它是最“自然”的,所以叫“自然对数”。
    我们可以从自然对数最早是怎么来的来说明其有多“自然”。以前人们做 乘法就用乘法,很麻烦,发明了对数这个工具后,乘法可以化成加法,即: log(ab) = loga + logb。
    但是能够这么做的前提是,我要有一张 对数表,能够知道loga和logb是多少,然后求和,能够知道log多少等于这个和。虽然编对数表很麻烦,但是编好了就是一劳永逸的事情,因此有个大数学家开始编对数表。但他遇到了一个麻烦,就是这个对数表取多少作为底数最合适?10吗?或是2?为了决定这个底数,他做了如下考虑:
    1.所有乘数/ 被乘数都可以化到0-1之内的数乘以一个10的几次方,这个用 科学记数法就行了。
    2.那么只考虑做一个0-1之间的数的 对数表了,那么我们自然用一个0-1之间的数做 底数(如果用大于1的数做底数,那么取完对数就是 负数,不好看)。
    3.这个0-1间的底数不能太小,比如0.1就太小了,这会导致很多数的对数都是零点几;而且“ 相差很大的两个数的对数值却相差很小”,比如0.1做底数时,两个数相差10倍时,对数值才相差1。换句话说,像0.5和0.55这种相差不大的数,如果用0.1做底数,那么必须把对数表做到精确到 小数点以后很多位才能看出他们对数的差别。
    4.为了避免这种缺点,底数一定要接近于1,比如0.99就很好,0.9999就更好了。总的来说就是1 - 1/X ,X越大越好。在选了一个足够大的X(X越大, 对数表越精确,但是算出这个对数表就越复杂)后,你就可以算
    (1-1/X) 1 = P1 ,
    (1-1/X) 2 = P2 ,
    ……
    那么对数表上就可以写上P1的对数值是1,P2的对数值是2……(以1-1/X作为 底数)。而且如果X很大,那么P1,P2,P3……间都靠得很紧,基本可以满足均匀地覆盖了0.1-1之间的 区间
    5.最后他再调整了一下,用(1- 1/X) X作为底,这样P1的对数值就是1/X,P2的对数值就是2/ X,……PX的对数值就是1,这样不至于让一些对数值变得太大,比如若X=10000,有些数的对数值就要到几万,这样调整之后,各个数的对数值基本在0-1之间。两个值之间最小的差为1/X。
    6.让 对数表更精确,那么X就要更大,数学家算了很多次,1000,1万,十万,最后他发现,X变大时,这个底数(1 - 1/X) X趋近于一个值。这个值就是1/e,自然对数底的 倒数(虽然那个时候还没有给它取名字)。其实如果我们第一步不是把所有值放缩到0.1-1之间,而是放缩到1-10之间,那么同样的讨论,最后的出来的结果就是e了--- 这个大数学家就是著名的 欧拉(Euler),自然对数的名字e也就来源于欧拉的姓名。
    当然后来数学家对这个数做了无数研究,发现其各种神奇之处,出现在对数表中并非偶然,而是相当自然或必然的。因此就叫它自然对数底了。

    自然律

    编辑

    螺线

    涡形或螺线型是自然事物极为普遍的存在形式,比如:一缕袅袅升上蓝天的炊烟,一朵碧湖中轻轻荡开的涟漪,数只缓缓攀援在篱笆上的蜗牛和无数在恬静的夜空携拥着旋舞的繁星……螺线表达自然律。螺线特别是 对数螺线的美学意义可以用 指数的形式来表达:φkρ=αe。其中,α和k为常数,φ是 极角,ρ是 极径,e是 自然对数的底。为了讨论方便,我们把e或由e经过一定变换和复合的形式定义为“自然律”。因此,“自然律”的核心是e,其值为2.71828……,是一个无限不循环数。

    自然律之美

    “自然律”是e及由e经过一定变换和复合的形式。e是“自然律”的精髓,在数学上它是函数:(1+1/x) x
    当X趋近无穷时的 极限。人们在研究一些实际问题,如物体的冷却、细胞的繁殖、 放射性元素的衰变时,都要研究(1+1/x) x,当X趋近无穷时的极限。正是这种从无限变化中获得的有限,从两个相反方向发展(当X趋向正 无穷大的时,上式的极限等于e=2.71828……,当X趋向负无穷大时候,上式的结果也等于e=2.71828……)得来的共同形式,充分体现了宇宙的形成、发展及衰亡的最本质的东西。

    渊源及发展

    1.宇宙与生命
    现代宇宙学表明,宇宙起源于“大爆炸”, 熵定律,即 热力学第二定律相吻合。熵定律指出,物质的演化总是朝着消灭信息、瓦解秩序的方向,逐渐由复杂到简单、由高级到低级不断退化的过程。退化的极限就是无序的平衡,即熵最大的状态,一种无为的死寂状态。这过程看起来像什么?只要我们看看天体照相中的旋涡星系的照片即不难理解。如果我们一定要找到 亚里士多德所说的那种动力因,那么,可以把宇宙看成是由各个预先上紧的发条组织,或者干脆把整个宇宙看成是一个巨大的发条,历史不过是这种发条不断争取自由而放出能量的过程。
    生命体的进化却与之有相反的特点,它与热力学第二定律描述的熵趋于极大不同,它使生命物质能避免趋向与环境衰退。任何生命都是 耗散结构系统,它之所以能免于趋近最大的熵的死亡状态,就是因为生命体能通过吃、喝、呼吸等新陈代谢的过程从环境中不断吸取负熵。新陈代谢中本质的东西,乃是使有机体成功的消除了当它自身活着的时候不得不产生的全部熵。
    2. 自然律的价值
    “自然律”一方面体现了 自然系统朝着一片混乱方向不断瓦解的崩溃过程(如元素的衰变),另一方面又显示了 生命系统只有通过一种 有序化过程才能维持自身稳定和促进自身的发展(如细胞繁殖)的本质。正是具有这种把有序和无序、生机与死寂寓于同一形式的特点,“自然律”才在美学上有重要价值。
    如果荒僻不毛、浩瀚无际的大漠是“自然律”无序死寂的熵增状态,那么广阔无垠、生机盎然的草原是“自然律”有序而欣欣向荣的动态稳定结构。因此,大漠使人感到肃穆、苍茫,令人沉思,让人回想起生命历程的种种困顿和坎坷;而草原则使人兴奋、雀跃,让人感到生命的欢乐和幸福。
    3. 自然律的表达
    e=2.71828……是“自然律”的一种量的表达。“自然律”的形象表达是螺线。螺线的数学表达式通常有下面五种:(1) 对数螺线;(2) 阿基米德螺线;(3) 连锁螺线;(4) 双曲螺线;(5)回旋螺线。对数螺线在自然界中最为普遍存在,其它螺线也与对数螺线有一定的关系,不过我们仍未找到螺线的通式。对数螺线是1638年经 笛卡尔引进的,后来瑞士数学家雅各·伯努利曾详细研究过它,发现对数螺线的渐屈线和 渐伸线仍是对数螺线,极点在对数螺线各点的 切线仍是对数螺线,等等。伯努利对这些有趣的性质惊叹不止,竟留下遗嘱要将对数 螺线画在自己的墓碑上。
    4.螺线的哲学
    英国著名画家和艺术理论家 荷迦兹深深感到:旋涡形或螺线形逐渐缩小到它们的中心,都是美的形状。事实上,我们也很容易在古今的艺术大师的作品中找到螺线。为什么我们的感觉、我们的“精神的”眼睛经常能够本能地和直观地从这样一种螺线的形式中得到满足呢?这难道不意味着我们的精神,我们的“内在”世界同外在世界之间有一种比历史更原始的同构对应关系吗?
    我们知道,作为生命现象的基础物质蛋白质,在生命物体内参与着生命过程的整个工作,它的功能所以这样复杂高效和奥秘无穷,是同其结构紧密相关的。化学家们发现蛋白质的多钛链主要是螺旋状的,决定遗传的物质——核酸结构也是螺旋状的。
    古希腊人有一种称为风鸣琴的乐器,当它的琴弦在风中振动时,能产生优美悦耳的音调。这种音调就是所谓的“ 涡流 尾迹效应”。让人深思的是,人类经过漫长岁月进化而成的听觉器官的内耳结构也具涡旋状。这是为便于欣赏古希腊人的风鸣琴吗?还有我们的指纹、发旋等等,这种审美主体的生理结构与外在世界的同构对应,也就是“内在”与“外在”和谐的自然基础。
    有人说 数学美是“一”的光辉,它具有尽可能多的 变换群作用下的不变性,也即是拥有自然普通规律的表现,是“多”与“一”的统一,那么“ 自然律”也同样闪烁着“一”的光辉。谁能说清e=2.71828……给数学家带来多少方便和成功?人们赞扬直线的刚劲、明朗和坦率,欣赏曲线的优美、变化与含蓄,殊不知任何直线和曲线都可以从螺线中取出足够的部分来组成。有人说美是主体和客体的同一,是内在精神世界同外在物质世界的统一,那么“自然律”也同样有这种统一。人类的认识是按 否定之否定规律发展的,社会、自然的历史也遵循着这种辩证发展规律,是什么给予这种形式以生动形象的表达呢?螺线!
    5. 自然律的哲学
    有人说美在于事物的节奏,“自然律”也具有这种节奏;有人说美是动态的平衡、变化中的永恒,那么“自然律”也同样是动态的平衡、变化中的永恒;有人说美在于事物的力动结构,那么“自然律”也同样具有这种结构——如表的游丝、机械中的弹簧等等。
    “自然律”是形式因与动力因的统一,是事物的形象显现,也是具象和抽象的共同表达。有限的生命植根于无限的自然之中,生命的脉搏无不按照宇宙的旋律自觉地调整着运动和节奏……有机的和无机的,内在的和外在的,社会的和自然的,一切都合而为一。这就是“自然律”揭示的全部美学奥秘吗?不!“自然律”永远具有不能穷尽的美学内涵,因为它象征着广袤深邃的大自然。正因为如此,它才吸引并且值得人们进行不懈的探索,从而显示人类不断进化的本质力量。(原载《科学之春》杂志1984年第4期,原题为:《自然律——美学家和艺术家的 瑰宝》)

    复数的对数

    编辑
    问题:求复数
    的自然对数
    解答:把复数写成指数形式,也就是
    为复数的模,即
    为复数的 辐角主值
    这就是当真数为复数时的自然对数运算公式
    例:求ln(-1)
    解:-1=-1+0i,对应复平面上的点为(-1,0),则其幅角主值为π,模长为1。
    代入公式得:
    由此可见
    ,即
    ,这就是 欧拉恒等式

    e与π的哲学意义

    编辑
    数学讲求规律和美学,可是 圆周率π和自然对数e那样基本的常量却那么混乱,就如同两个“数学幽灵”。人们找不到π和e的数字变化的规律,可能的原因:例如:人们用的是十进制,古人掰指头数数,因为是十根指头,所以定下了十进制,而二进制才是宇宙最朴素的进制,也符合阴阳理论,1为阳,0为阴。再例如:人们把π和e与那些规整的数字比较,所以觉得e和π很乱,因此涉及“参照物”的问题。那么,如果把π和e都换算成最朴素的二进制,并且把π和e这两个混乱的数字相互比较,就会发现一部分数字规律,e的小数部分的前17位与π的小数部分的第5-21位正好是倒序关系,这么长的倒序,或许不是巧合。
    说明 [ ]符号内为17位倒序区。
    二进制π取部分值为11.0010 [01000011111101101]010100010001000010110100011
    二进制e取部分值为10. [10110111111000010]101000101100010100010101110110101
    17位倒序区的意义:或许暗示e和π的发展初期可能按照某种彼此相反的规律发展,之后e和π都脱离了这个规律。但是,由于2进制只用0和1来表示数,因而出现相同,倒序相同,栅栏重排相同的情况不足为奇,虽然这种情况不一定是巧合,但思辨性结论不是科学结论,不应该作为科学证据使用。
    展开全文
  • 近日,国家自然科学基金委员会公布了2018国家自然科学基金各类项目具体的申报、受理与资助数据,这些项目包括申报人数较多的面上项目、青年科学基金项目、地区科学基金项目,以...

    640?wx_fmt=gif

    近日,国家自然科学基金委员会公布了2018年国家自然科学基金各类项目具体的申报、受理与资助数据,这些项目包括申报人数较多的面上项目、青年科学基金项目、地区科学基金项目,以及竞争较为激烈的重点项目、国家杰青项目、优秀青年科学基金项目、海外及港澳学者合作研究基金项目等

    再有几个月,2019年的国家自然科学基金项目申报工作就要开始了。为提高项目申报成功率,很有必要参考往年的申报与资助数据。青塔对基金委公布的2018年国家自然科学基金项目的申报与资助数据进行了整理,供有需要的科研人员参考。

     面上项目 

    2018年,国家基金委共受理申请面上项目92622项,涉及总金额6320107.96万元。经过评审,基金委共资助面上项目18947项,总金额1115289.00万元。从项目数来看,资助率为20.46%。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

    基金委同时还统计了2018年国家自然科学基金面上项目资助金额超过2000万元的单位名单,其中上海交通大学、浙江大学、中山大学、复旦大学、华中科技大学、北京大学、同济大学、中南大学、清华大学、四川大学位居前十位。

    640?wx_fmt=jpeg640?wx_fmt=jpeg

     青年科学基金项目 

    2018年,国家基金委共受理申请青年科学基金项目86042项,涉及总金额2115944.71万元。经过评审,基金委共资助青年科学基金项目17671 项,总金额417644.0万元。从项目数来看,资助率为20.54% 。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

     地区科学基金 

    2018年,国家基金委共受理申请地区科学基金项目17900 项,涉及总金额746468.20万元。经过评审,基金委共资助地区科学基金项目2937 项,资助总金额110333.00 万元。从项目数来看,资助率为16.41% 。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

     重点项目 

    2018年,国家基金委共受理申请重点项目3364项,涉及总金额1066168.80万元。经过评审,基金委共资助重点项目701 项,总金额205442.00 万元。从项目数来看,资助率为20.84 % 。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

     国家杰青项目 

    2018年,国家基金委共受理申请国家杰青项目2974项,涉及总金额1021685.00万元。经过评审,基金委共资助国家杰青项目199项,资助总金额 68285.00 万元。从项目数来看,资助率为6.69% 。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

     国家优青项目 

    2018年,国家基金委共受理申请国家优青项目5421项,涉及总金额704730.00万元。经过评审,基金委共资助国家优青项目400项,资助总金额52000.00万元。从项目数来看,资助率为7.38% 。申请与资助情况按学科领域统计如下:

    640?wx_fmt=jpeg640?wx_fmt=jpeg640?wx_fmt=jpeg

    (数据来源:国家自然科学基金委员会网站)

    ————


    微信公众号“算法数学之美”,由算法与数学之美团队打造的另一个公众号,欢迎大家扫码关注!

    640?wx_fmt=jpeg


    更多精彩:

    如何向5岁小孩解释什么是支持向量机(SVM)?

    自然底数e的意义是什么?

    费马大定理,集惊险与武侠于一体

    简单的解释,让你秒懂“最优化” 问题

    一分钟看懂一维空间到十维空间

    ☞ 本科、硕士和博士到底有什么区别?

    小波变换通俗解释

    微积分必背公式

    影响计算机算法世界的十位大师

    数据挖掘之七种常用的方法

    算法数学之美微信公众号欢迎赐稿

    稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

    投稿邮箱:math_alg@163.com

    展开全文
  • Java计算日期在当月是第几周背景Java LocalDate API每月第1周一为该月第周的做法每月1号为第周做法 背景 公司项目需求是统计周报,开始我的做法是按每月1号开始为第周统计周报,比如2020-05-01到2020-05-...
  •  刘知远,NLPer前几曾经马少平老师的引荐,为某科普图书写过篇短文介绍自然语言处理。如果只是介绍NLP的概念、任务和挑战,应该可以参考这篇小文。原文如下,仅供参考。自然语言处理Natural Language ...
  •  在“遗忘”这条非主流自然语言处理路上,不知不觉已经摸索了三有余,遗忘算法也略成体系,虽然仍觉时机未到,还是决定先停一下,将脑中所积梳理成文,交由NLP的同好们点评交流。  曾与前总编刘江有过...
  • 漫谈程序员系列:一个老程序员的2014终总结

    万次阅读 多人点赞 2014-12-29 06:31:37
    一个老程序员的2014,是怎么样度过的呢……
  • 自然底数e大揭秘

    千次阅读 多人点赞 2014-09-11 20:41:22
    e有时被称为自然常数(Natural constant),是一个约等于2.71828182845904523536……的无理数。 以e为底的对数称为自然对数(Natural logarithm),数学中使用自然(Natural)这个词的还有自然数(Natural ...
  • 什么是自然语言处理

    千次阅读 2016-02-02 09:56:47
    简单地说,自然语言处理(Natural Language Processing,简称NLP)就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。...
  • 自然语言处理(NLP)简介

    千次阅读 多人点赞 2020-05-30 00:00:29
    简单地说,自然语言处理就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。由于自然语言是人类区别于其他动物的根本...
  • 自然常数e是什么?它是怎么来的?

    千次阅读 2019-01-26 21:22:21
    在数学中,有一个被称为自然常数(又叫欧拉数)的常数。之所以把这个数称之为自然常数,是因为自然界中的不少规律与该数有关。不过,这个数最初不是在自然界中发现的,而是与银行的复利有关。 想象一下,如果把钱...
  • 一个java程序员44个工作的经历

    万次阅读 多人点赞 2014-02-21 18:28:16
    今天看到一个帖子说程序员怎么提升自己的技能,里面说了十多项,对自己感觉能有用的有以下几点:读书、读代码、读博客、写博客,回答别人的问题,参加一个开源项目,参加培训、研讨会。 回答问题当中给自己的思考:...
  • 自然底数e的意义是什么?

    千次阅读 2018-09-20 08:15:16
    自然底数e的意义是什么?   https://mp.weixin.qq.com/s?__biz=MzA5ODUxOTA5Mg==&amp;mid=2652553811&amp;idx=1&amp;sn=000305074471c3d4c681c9cfd4e4bc93&amp;chksm=8b7e3308bc09ba1e3043f5568a...
  • 自然语言处理技术的三里程碑

    千次阅读 2013-02-25 18:38:05
    自然语言处理技术的三里程碑 微软亚洲研究院黄昌宁张小凤 摘要要: 本文就半世纪以来自然语言处理(NLP)研究领域中笔者所观察到的要点进行阐述, 其中包括两事实和三大重要成果。近年自然语言处理研究所揭示...
  • 安装NLTK环境 1.1 windows 7 32的安装 1. 安装Python2.7(稳定版本,http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy); 2. 安装NumPy:(http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy)运行numpy‑MKL...
  • 2013终总结,我这一年的点点滴滴

    万次阅读 多人点赞 2013-12-31 08:30:44
    不知不觉,2013竟然已经到了最后一天了,...在之前的二十几里面,我从来没有给自己做过年终总结,确实是没有这样一个习惯,那么这次就当做是第一回吧,也算是给未来留个纪念。 在2013的年初,我决心从上...
  • 深度学习与自然语言处理(1)_斯坦福cs224d Lecture 1

    万次阅读 多人点赞 2016-06-02 16:00:08
    这是本课程的第节,我们会先介绍自然语言处理(NLP)的概念和NLP现在所面对问题;然后开始讨论用数学向量代表自然语言词组的设想。最后我们会讨论现行的词向量构造方法。
  • 找工作季来了,互联网大潮也将至。近来陆续有不少师弟师妹校友求分享各种资料和经验,想来手头上...前面已经有找工作笔试面试那些事儿(15)---互联网公司面试的零零种种和多家经验、找工作笔试面试那些事儿(14)---轻松
  • 自然语言处理NLP中的N-gram模型

    万次阅读 多人点赞 2018-05-07 21:00:03
    自然语言处理NLP中的N-gram模型...用途:词性标注 用途二:垃圾短信分类 用途三:分词器 用途四:机器翻译和语音识别 机器翻译 语音识别 N-gram中N的确定 N-gram中的数据平滑方法 拉普拉斯平滑 Add-one Add-K ...
  • 自然语言处理中的模式(模式1.概率化模式)

    万次阅读 热门讨论 2010-08-12 15:33:00
    自然语言处理中,歧义是非常容易出现的问题,无论是在分词,句法,语义各个层面都会面临歧义的问题,所谓歧义代表了对于一个输入有若干种输出,那么此时选择哪个作为正确输出就成为了一个问题。概率的引入为此提供...
  • 一个工作三左右的Java程序员跟大家谈谈从业心得

    万次阅读 多人点赞 2017-10-26 19:25:41
    WEB行业知识更新特别快,今天一个框架的新版本,明天又是另一个新框架,有时往往根据项目的需要来不断学习新东西;所有,很多时候感觉,自己用过的东西真多呀!但是真正深入研究的东西却不多。 面试,是跳槽后第...
  • 计算给定日期增加自然月后的日期

    千次阅读 2017-04-19 23:00:58
    该代码函数实现的功能是,在给定日期的基础上增加固定月份后的日期,注意增加的是自然月。...2001-01-28、2001-01-29、2001-01-30、2001-01-31 增加一个月后,得到的结果都应该是 2001-02-28 ; charset=gb2312
  • 本文将详细叙述今年目前为止自然语言处理界最重量级的数据集 SQuad。 SQuAD 是斯坦福大学于2016推出的数据集,一个阅读理解数据集,给定一篇文章,准备相应问题
  • 假设现在让你设计一个神经网络结构,去做这个语言模型的任务,就是说给你很多语料做这个事情,训练好一个神经网络,训练好之后,以后输入一句话的前面几个单词,要求这个网络输出后面紧跟的单词应该是哪个,你会怎么...
  •  本以为英汉字典的程序已经没有什么大问题了,没想到今天段伏枥想查一个单词,却发现事情根本就不是自己所料想的那么顺利:单词的查找速度太慢!这就奇怪了,之前为什么没有发现呢?说起来也让人啼笑皆非。之前之...
  • 这是斯坦福CS224d深度学习与自然语言处理的第3课,这节课先会介绍单层和多层神经网络和它们在机器学习分类任务中的应用, 接着介绍如何利用反向传播算法来训练这些神经网络模型(在这方法中,我们将利用偏导数的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,604
精华内容 44,241
关键字:

一个自然年怎么算