-
Python 的默认参数
Python的默认参数为编程带来了极大地便利,但同时误用默认参数也产生了不小的陷进。
默认参数的求值
在Python(34)的Documentation中,有这样一段叙述:
Default parameter values are evaluated from left to right when the function definition is executed.
Python的默认参数是从左向右求值。看下面这段代码:
param = [1, 3, 2, 4] def func(a=param.copy(), b=param.sort(), c=param.copy()): print(a, b, c) if __name__ == '__main__': func()
-
Java JNI 初探
什么是 JNI ?
JNI(Java Native Interface),Java 本地接口,是一个本机编程接口,提供了Java与C,C++语言的通信。JNI的主要实现方式为在Java中通过
System.loadLibrary
来加载C/C++编写的DLL。以此来调用C/C++实现的函数。Java调用C++
Java语言的写法:
package com.sighingnow.maker; /** * @author Tao He * */ public class Maker { static { System.loadLibrary("Maker"); } @SuppressWarnings("javadoc") public native int DisplayMakerInfo(String info); @SuppressWarnings("javadoc") public static void main(String[] args) { int length = (new Maker()).DisplayMakerInfo("Hello Maker JNI !"); System.out.println(length); } }
用
native
关键字定义的方法用C/C++实现。 -
寻找第K大的数
朴素的寻找第 $K$ 大元素可以排序,再找到第 $k$ 个,时间复杂度为 $O(n \times \log{n})$,但由于只需要第 $k$ 大,因此这样会造成很大的时间上浪费。 维护一个 $k$ 大的堆的时间复杂度为 $O(n \times \log{k})$,有所改进,但时间复杂度仍不够优,且实现复杂。而基于分治思想的算法可以在 $O(n)$的时间内找到 第 $k$ 大的数。
-
巧用异或(XOR)运算
异或(Exclusive or, XOR)是一种逻辑运算,在一些情境下,巧用异或运算能够很高效地解决问题。
异或运算的定义
异或运算的符号是
^
,其定义如下:a xor b = (a & ^b) | (^a & b)
真值表:
a b a xor b 0 0 0 0 1 1 1 0 1 1 1 0 -
K-近邻算法(KNN)
K-近邻算法(KNN, K Nearest Neighbors)是最基本、最简单、最有效的分类算法之一。KNN算法精度高、对异常值不敏感,可以有效地处理数据缺失的情况,但同时,KNN 算法的计算时间复杂度和空间复杂度都很高,特别是运行时需要载入全部数据,会占用很大的内存空间。
KNN算法的基本原理:输入未分类的(没有标签的)新数据时,将新数据的每个特征与样本集中的数据所对应的特征进行比较,然后提取出最相似的分类,作为新数据的分类。 一般来说,选取样本集中最相似的前 $k$ 个元素作为分类标准。通常来说,$k$ 的值不大于20,选择这 $k$ 个最相似元素中出现次数最多的分类作为新数据的分类。
-
Sleep Sort
Sleep Sort 是一种通过多线程的不同休眠时间的排序方法。可以很简单地用Shell脚本实现。
#! /bin/bash function func() { sleep "$1" echo "$1" } while [ -n "$1" ] do func "$1" & shift done wait
-
Python PEP 8 简单汇总
PEP 8 是Python的代码风格指南(Style Guide for Python Code),其中很多内容都来自Guido van Rossum。PEP 8 从代码格式、注释、空白、变量名、参考及权利声明等方面出发,主要提到了以下这些关于Python代码风格的问题。
代码格式(Code lay-out)
缩进(Indentation)
每一级缩进使用4个空格。当一行过长需要折行时,应该保持与换行的界定符的垂直对齐。如下例:
# Aligned with opening delimiter. foo = long_function_name(var_one, var_two, var_three, var_four)
或者下一行采用8个空格的缩进,与其他的正常缩进区别开来,例如:
-
Mathematica 输入与输出
基本输出
Mathematica的基本输出命令是
Print
,具体用法为:-
Print[expr]
输出 expr.
例如:
Print["Hello world"] Hello world Print[2^10] 1024
Print
命令也可以一次输出多项内容(用逗号,
隔开),输出时每项内容之间无间隔:Print["Hello world", 2^10] Hello world1024
-
-
cx_Freeze打包Python应用程序
cx_Freeze是一个打包Python应用的工具,通过cx_Freeze,可以制作Windows平台、MacOS平台、以及Linux平台的二进制可执行程序,使得Python应用能够在没有安装Python环境的机器上运行。
cx_Freeze的安装
同很多Python的第三方库类似,cx_Freeze也可以通过如下命令安装:
pip install cx_Freeze
或者从官网下载安装包,解压后,切换目录至解压后的根目录,运行命令
python setup.py install
即可。
-
Mathematica 笔记本(notebook)
本文主要记录Mathematica笔记本(notebook)使用过程中的一些小细节(Tips)。
注释
所有包含在
(*
和*)
之间的内容为注释内容,都会被Mathematica内核忽略。Mathematica区分字母大小写
所有的Mathematica命令都是以大写字母开头的,Mathematica区分字母大小写。因此,为了避免冲突,所有的用户定义符号都应当用小写字母开头。
函数参数
Mathematica中用方括号
[]
表示函数参数。例如:
Subscribe via RSS