SmileTM博客

_________Smile To Me

Python Tricks

Enumerate

enumerate 枚举的用法:

1
2
3
4
5
6
7
8
9
colors = ['red','green','yellow']
for i, name in enumerate(colors,0):
print(i,name)


out:
0 red
1 green
2 yellow

enumerate的第二个参数 代表 产生的index的起始

1
2
3
4
5
6
7
8
9
colors = ['red','green','yellow']
for i, name in enumerate(colors,1):
print(i,name)


out:
1 red
2 green
3 yellow

Zip

zip的用法:可以将两个list里的内容一一对应。

1
2
3
4
5
6
7
8
9
10
11
fruits = ['apple', 'orange']
colors = ['green','yellow']

for fruit, color in zip(fruits, colors):
print(fruit, color)



out:
apple green
orange yellow

Numpy Tricks

numpy.clip

np.clip(a, a_min, a_max , out=None)

a为数组,

当数组中的数小于a_min,则小于a_min的部分会被替换成a_min,

当数组中的数大于a_max,则大于a_max的部分会被替换成a_max。

若out指定为np.array a,则输出将会保存在a中

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> a = np.arange(10)
>>> np.clip(a, 1, 8)
array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.clip(a, 3, 6, out=a)
>>>a
array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6])
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.clip(a, [3, 4, 1, 1, 1, 4, 4, 4, 4, 4], 8)
array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])

Bert全名Bidirectional Encoder Representations from Transformers. 顾名思义,Bert最关键的在于Transformer.

Transformer是谷歌大脑在2017年底发表的论文attention is all you need中所提出的seq2seq模型. 现在已经取得了大范围的应用和扩展, 而BERT就是从transformer中衍生出来的预训练语言模型,Bert主要用到了Transformer的encoder部分. Transformer的具体介绍 在后面transformer_model 部分会详细介绍。

阅读全文 »

图形学问题

最近在做毕设时,遇到 判断线段是否经过矩形障碍物的图形学问题。

为了解决这一问题,我们先看看 如何判断两线段是否相交

线段与线段是否相交

具体解决办法大致可以分为两个步骤。

a.快速排斥实验

若以该线段为对角线的矩形A与该障碍物矩形B不重合,则显然这两线段不相交。

但,若矩形A与矩形B重合,则并不一定代表这两线段相交。

1

阅读全文 »

最近,在做毕业设计,有关Ros这方面的。于是,利用空余时间,简单的探索了一下。

环境Ubuntu 16.04 LTS + ROS kinetic

首先为catkin创建一个工作空间

如果已装好了catkin,并且初始化好了变量环境,且创建好了工作空间,则该步骤可以跳过。

若没有,则可以按照下面步骤进行。

阅读全文 »

在Hexo博客中书写LaTex公式时遇到渲染问题,一开始无法识别LaTex公式,然后就是无法正常渲染矩阵。

结合网上不清晰的教程,得出结论要在Hexo上渲染LaTex,要通过MathJax来渲染,摸索了一晚,终于成功了。

阅读全文 »

NG深度学习中用到的函数

sigmoid函数

$$
\text{For } x \in \mathbb{R}^n \text{, } sigmoid(x) = sigmoid\begin{pmatrix}
x_1 \
x_2 \
… \
x_n \
\end{pmatrix} = \begin{pmatrix}
\frac{1}{1+e^{-x_1}} \
\frac{1}{1+e^{-x_2}} \
… \
\frac{1}{1+e^{-x_n}} \
\end{pmatrix}\tag{1}
$$

python代码实现:

1
2
3
4
import numpy as np
def sigmoid(x):
s = 1 / (1 + np.exp(-x))
return s

Sigmoid gradient(梯度,求导)

经过dS = ds/dx的求导运算发现dS = s*(1-s)
$$
sigmoid_derivative(x) = \sigma’(x) = \sigma(x) (1 - \sigma(x))\tag{2}
$$

1
2
3
4
def sigmoid_derivative(x):
s = sigmoid(x)
ds = s*(1-s)
return ds
阅读全文 »

在IDEA中 利用Maven 来构造Struts2的配置环境。

由于,大多数都使用的是Eclipse or MyEclipse,而IDEA的 环境配置教程相对较少,也为了自己日后使用方便,在此简单讲解下如何利用IDEA配置 Maven+Struts2。

阅读全文 »

Linux ln命令 (Link)
  • ln -s abc cde 建立abc的软连接
  • ln abc cde 建立硬连接(不可以对文件夹进行硬连接)

abc 为源文件 ,cde为目标指向文件,既就是建立cde -> abc

软链接与硬链接的区别 :

Linux 软连接与硬连接

对于一个文件来说,有唯一的索引接点与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。注意在Linux下是一切皆文件的啊,文件夹、新加的硬盘 …都可以看着文件来处理的啊。

连接有软连接和硬连接(hard link)之分的,软连接(symbolic link)又叫符号连接。符号连接相当于Windows下的快捷方式。

不可以对文件夹建立硬连接的,我们通常用的还是软连接比较多。

阅读全文 »

返回函数与匿名函数:

以下是两种相同作用的两个函数,一个是利用lambda表达式,一个没有,可以看出lambda的简洁之处。

通过下面代码一与代码二的对比,可以看出:

当返回lambda表达式为无参数时,其式中的x,y为外部变量,其具体数据由外部的所给定的x,y所决定,如代码一

代码一:

1
2
3
4
5
6
7
8
9
10
11
def build_return_lambda(x, y):
return lambda: x ** 2 + y ** 2


def build_return(x, y):
def g():
return x ** 2 + y ** 2
return g

f = build_return_lambda(2, 2)
print(f())

当返回的lambda表达式为有参时,则由用户输入的决定

代码二:

1
2
3
4
5
6
7
8
9
10
11
def build_return_lambda2():
return lambda x, y: x ** 2 + y ** 2


def build_return1():
def g(x, y):
return x ** 2 + y ** 2
return g

f = build_return_lambda2()
print(f(2, 2))
阅读全文 »

在了解SSH中Hibernate之后,与另一SSM框架中的Mybatis相比确实缺少一定的灵活性。根据各种大神反馈来看,Hibernate与Mybatis的优缺点如下:

整体比较两者相同点

  • Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

  • Hibernate和MyBatis都支持JDBC和JTA事务处理。

    阅读全文 »
0%