第四章
4.2 通用函数:快速的逐元素数组函数
通用函数也称为ufunc,是一种在ndarray数据中进行逐元素操作的函数。
常用的一元通用函数:
函数名 | 描述 |
---|---|
ads, fabs | 逐元素的计算整数、浮点数或者复数的绝对值 |
sqrt | 计算每个元素的平方根(与 arr ** 0.5 相等) |
square | 计算每个元素的平方(与 arr ** 2 相等) |
exp | 计算每个元素的自然指数值 e x |
log, log10, log2 | 分别对应:自然对数(e为底)、对数10为底、对数2为底 |
isnan | 返回数组中的元素是否是一个NaN(不是一个数值),形式为布尔数值组 |
lofical_out | 对数组元素按位取反(与~arr效果一致) |
例子如下:
>>>arr = np.arange(10)
>>>arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#计算平方根
>>>np.sqrt(arr)
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
#是否大于五
>>>np.logical_not(arr < 5)
array([False, False, False, False, False, True, True, True, True,
True])
>>>arr > 5
array([False, False, False, False, False, False, True, True, True,
True])
常用二元通用函数:
add | 将数组的对应元素相加 |
---|---|
multiply | 将数组的对应元素相乘 |
maximun, fmax | 逐个元素计算最大值,fmax忽略NaN |
minmum, fmin | 逐个元素计算最小值,fmin忽略NaN |
greater, greater_equal,less, not_equal | 逐个元素的比较,返回布尔数值组(与数学操作符>, >=, <, !=相等) |
logical_and, logical_or, logical_xor | 进行逐个元素的逻辑操作(与逻辑操作符&, |
>>>x = np.random.randn(8)
>>>y = np.random.randn(8)
>>>x
array([ 0.7806148 , 0.82231803, -0.22952214, 1.76762386, -1.57489118,
0.19034961, 0.80521737, -0.91145306])
>>>y
array([-1.62060602, -0.3260956 , 1.98282335, 0.52799103, -0.35916357,
0.60663749, -1.64518124, 0.45840609])
>>>np.add(x, y)
array([-0.83999122, 0.49622243, 1.7533012 , 2.29561489, -1.93405475,
0.7969871 , -0.83996387, -0.45304696])
>>>np.maximum(x , y)
array([ 0.7806148 , 0.82231803, 1.98282335, 1.76762386, -0.35916357,
0.60663749, 0.80521737, 0.45840609])
通用函数接受一个可选参数out,out是将结果写入的位置,处理多批大数据时可以提升效率。
>>>arr = np.random.randn(8)
>>>arr
array([ 0.46890746, -0.86663969, 1.65777646, -0.84900795, -0.95264991,
-1.23573652, -0.83732405, 0.60619662])
>>>np.sqrt(arr)
array([0.68476818, nan, 1.28754668, nan, nan,
nan, nan, 0.7785863 ])
#arr没有改变
>>>arr
array([ 0.46890746, -0.86663969, 1.65777646, -0.84900795, -0.95264991,
-1.23573652, -0.83732405, 0.60619662])
#将结果输出到arr中
>>>np.sqrt(arr, out=arr)
array([0.68476818, nan, 1.28754668, nan, nan,
nan, nan, 0.7785863 ])
#arr改变了
>>>arr
array([0.68476818, nan, 1.28754668, nan, nan,
nan, nan, 0.7785863 ])
微生物基因组学
1,细菌基因组变化的另一个主要原因是某些细菌具有从其他生物摄取DNA的能力,即所谓水平基因转移(LGT)。
2,转化是指细菌从环境中获取DNA的过程,即使没有特殊的DNA吸收基因,某些细菌仍有能力吸收环境中的DNA。
3,可自主复制和移动的质粒在无亲缘关系的细菌间移动的过程称为接合。结合性DNA可以在种间关系很远的生物间转移。
4,有些质粒还可以进行反向转移,刚刚抵达受体细胞的这些质粒会通过接合转移反向进入供体细胞,并带走受体细胞的某些基因。含有这种质粒的细菌,可以像小偷一样利用反向转移获取它们临近的细菌的基因。
5,寄主细胞错配修复的特异性,是在亲缘关系很远的细菌间进行同源重组的一道屏障。在重组链形成的异源二倍体中,错配的碱基越多,重组效率越低。因此,许多由重组介导的机制,局限于种内或者高度保守的DNA区域中。同时,重组序列在重组时也存在丢失的偏向性。这解释了在许多生物中,假基因被快速的删除,以及细菌基因组为什么不能持续增大。
看python不麻烦,可是看微生物基因组我已经有看不懂的地方了…要怀疑自己的专业了都。o(╯□╰)o