@Rumia
2016-06-29T02:02:21.000000Z
字数 3231
阅读 904
注:本次作业和马思远、府嘉颖、陶文弢同学合作讨论完成
Linux操作系统
Name: 丁晨超
Number: 5140809061
sed -n -e '0~2p' filename; sed '1!G;h;$!d' filename
会影响 ; 否(硬链接才有)
第一个命令行参数,即脚本文件名; 接受所有命令行参数并各加上双引号
stdin; stdout; stderr
字符串长度;a[0]的字符串长度
将变量声明为数组变量; 将变量声明为整数变量
假如x没有设定或为空值,则使用5作为默认值(保留非空值);
若x没设定或为空值,则使用5作为默认值,同时将x定义为非空值(保留非空值);
除非x为空值,否则使用5作为默认值(保留空值)先进后出; 先进先出
O(8); O(n-8)
CD
AC
B
AB
A
AB
B
ABC
BC
B
C
C
CD
BCD
D
A
D
A
B
A
(1) 创建一个目录,其 group 权限设为 r-- ,再把该目录下其他同组用户创建的文件的 group 权限设为 ---
(2) awk 统计词频并输出最高频率的 10 个词:
cat words.txt | sort | uniq -c | sort -k1,1nr | head -10
(3) 用 bash 输出Fibonacci 数列的前 10 个数:
declare -i i;
declare -i n;
declare -i pre;
declare -i rs;
i=0;
n=10;
rs=0; # the current num f(n)
pre=0; # the previous num f(n-1)
while [ "$i" != "$n" ]
do
i=$(($i+1))
if [ "$n" -lt "0" ]; then
echo "n($n) must be assigned non-negative"
exit 1
fi
if [ "$i" = "0" ]; then
pre=0;
rs=0;
elif [ "$i" = "1" ]; then
pre=0;
rs=1;
else
rs=$(($rs+$pre));
pre=$(($rs-$pre));
fi
echo -n "$rs ";
done
echo -e "\nThe th-$n fibonacci is f($n)=$rs"
(4) 输出 100-10000 所有幸运数字的代码如下:
# 这是一道典型的“数根”问题
def isLuckyNumber(n):
if n%9 == 7:
return True
else:
return False
def main():
for i in range(100, 10001):
if isLuckyNumber(i):
print i
main()
(5) 将数值倒序输出的 Python 实现:
def reverseNumber(n):
lst = list(str(n))
lst.reverse()
while lst[0] == '0':
lst = lst[1:]
res = ''.join(lst)
return int(res)
(6) 以下的 __init__, __str__, __len__, __del__ 都是特殊方法
class Book(object):
def __init__(self, title, author, pages):
print "A book is created"
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return "Title:%s , author:%s, pages:%s " %(self.title, self.author, self.pages)
def __len__(self):
return self.pages
def __del__(self):
print "The book '%s' is destroyed" %(self.title)
(8)
设经验方程是y=F(x),方程中含有一些待定系数an,给出真实值{(xi,yi)|i=1,2,...n},将这些x,y值代入方程然后作差,可以描述误差:yi-F(xi)。
为了考虑整体的误差,可以取平方和,之所以要平方是考虑到误差可正可负直接相加可以相互抵消,所以记误差为: e=∑(yi-F(xi))2。
它是一个多元函数,有an共n个未知量,现在要求的是最小值。所以必然满足对各变量的偏导等于0,于是得到n个方程:
de/da1=0
de/da2=0
...
de/dan=0
n个方程确定n个未知量为常量是理论上可以解出来的。用这种误差分析的方法进行回归方程的方法就是最小二乘法。如果经验方程是线性的,形如y=ax+b,就是线性回归。按上面的分析,误差函数为: e=∑(yi-axi-b)2各偏导为:
de/da=2∑(yi-axi-b)xi=0
de/db=-2∑(yi-axi-b)=0
于是得到关于a,b的线性方程组:
(∑xi2)a+(∑xi)b=∑yixi
(∑xi)a+nb=∑yi
设A=∑xi2,B=∑xi,C=∑yixi,D=∑yi,则方程化为: Aa+Bb=C Ba+nb=D
解出a,b得:
a=(Cn-BD)/(An-BB)
b=(AD-CB)/(An-BB)
(10)
Pandas中的数据结构
- Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
- Time-Series:以时间为索引的Series。
- DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
- Panel:三维的数组,可以理解为DataFrame的容器。
内置数据结构
分为元组、列表、基于列表的堆栈和队列实现、字典和序列。
(11)
首先梯度下降法和高斯牛顿法都是最优化方法。其区别之处在于,梯度下降法在寻找目标函数极小值时,是沿着反梯度方向进行寻找的。梯度的定义就是指向标量场增长最快的方向,在寻找极小值时,先随便定初始点(x0,y0)然后进行迭代不断寻找直到梯度的模达到预设的要求。但是梯度下降法的缺点之处在于:在远离极小值的地方下降很快,而在靠近极小值的地方下降很慢。而高斯牛顿法是一种非线性最小二乘最优化方法。其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。高斯牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。所以在高斯牛顿法中加入了因子μ,当μ大时相当于梯度下降法,μ小时相当于高斯牛顿法。在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。
(12) 以下这段代码(人类IQ分布)在一定程度上验证了大数定律,数据的均值趋向于它的数学期望(设置为100):
import numpy as np
import matplotlib.pyplot as plt
def main():
mu,sigma = 100,15
x = mu + sigma*np.random.randn(10000)
n,bins,patches = plt.hist(x,50,normed=1,facecolor='g',alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60,.025,r'$\mu=100,\ \sigma=15$')
plt.axis([40,160,0,0.03])
plt.grid(True)
plt.show()
main()