利用python进行数据分析(十)

第4章 NumPy基础:数组与向量化计算

NumPy,是Numerical Python的简称,它是目前python数值计算中最为重要的基础包,具有三个显著的优点:它的设计对于含有大量数组的数据非常有效,对于内存的使用少,它可以针对全量数组进行复杂计算而不需要写python循环。

4.1 NumPy ndarry:多维数组对象
NumPy的核心特征之一就是N-维数组对象--ndarryndarry是python中一个快速灵活的大型数据集容器,数组允许我们使用类似于标量的操作语法在整块数据上进行数学计算。

一个ndarry是一个通用的多维同类数据容器,也就是说,它包含的每一个元素均为相同的类型。每一个数组都有一个shape属性,用来表征每一维度的数量;每一个数组还有一个dtype属性,用来描述数组的数据类型

在使用NumPy前,需要导入它,标准的导入方式为:

import numpy as np

4.1.1 生成ndarray
生成数组最简单的方式就是使用array函数。array函数接受任意的序列型对象(也包括其他数组),然后生成一个新的包含传递数据的NumPy数组。

将一个列表转换为数组:

>>>import numpy as np
#将一个列表转换为数组
>>>data1 = [6, 7.5, 8, 0, 1]
>>>arr1 = np.array(data1)
>>>arr1
array([6. , 7.5, 8. , 0. , 1. ])

嵌套序列,例如等长度的列表,将会自动转换成多维数组

>>>data2 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>>arr2 = np.array(data2)
>>>arr2
rray([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

因为data2是一个包含列表的列表,因此形成的arr2数组是一个二维数组,我们可以通过检查ndimshape属性来确认这一点:

>>>arr2.ndim
2
>>>arr2.shape
(3, 4)

二维数组类似我们的表格,有两个轴,0轴代表1轴代表
在这里插入图片描述
除非显示的指定,否则np.array会自动推断生成数组的数据类型,可以检查它的dtype属性来确定其类型:

>>>arr1.dtype
dtype('float64')
>>>arr2.dtype
dtype('int32')

除了np.array,还有其他函数可以用来创建新数组。

给定长度即形状后,zeros可以一次性创造全0数组,ones可以一次性创造全1数组,而empty则会创建一个没有初始化数值的数组,使用full函数可以生成给定数值和形状的数组。要创建高维数组,需要向shape传递一个元组

>>>np.zeros(9)
array([0., 0., 0., 0., 0., 0., 0., 0., 0.])
       
>>>np.ones((2,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])
       
>>>np.empty((2, 3, 4))
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],
       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])

>>>np.full((2,3),5)
array([[5, 5, 5],
       [5, 5, 5]])

还有,arange是python内建函数range的数组版:

np.arange(15)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

4.1.2 ndarry的数据类型
数组含有一个dtype属性。在NumPy中,没有特殊指定的话,使用上面方法生成数组的默认数据类型是float64(浮点型),或者在生成数组的时候,使用关键字dtype指定数据类型:

>>>arr1 = np.array([1, 2, 3], dtype=np.float64)
>>>arr2 = np.array([1, 2, 3], dtype=np.int32)

>>>arr1.dtype
dtype('float64')
>>>arr2.dtype
dtype('int32')

NumPy含有多种数据类型,但是我们一般只要注意到数据大类就可以,如浮点数、整数或者字符串等,当然我们可以通过astype方法显示的转换数据类型:

>>>arr1 = np.array([1, 2, 3, 4, 5])
>>>arr2 = arr1.astype(np.float64)
可以看到整数转换为了浮点数
>>>arr2
array([1., 2., 3., 4., 5.])

如果将浮点数转换为整数,则小数点后的部分会被消除,注意是消除,而不是四舍五入。

>>>arr3 = np.array([1.1, 2.2, 6.6, 8.8])
>>>arr4 = arr3.astype(np.int32)
>>>arr4
array([1, 2, 6, 8])

如果数组里面的元素是表达数字含义的字符串,也可以通过astype方法将字符串转换为数字

>>>arr5 = np.array(['1.1', '-2.2', '33'], dtype=np.string_)
>>>arr5
array([b'1.1', b'-2.2', b'33'], dtype='|S4')
>>>arr6 = arr5.astype(float)
>>>arr6
array([ 1.1, -2.2, 33. ])

要注意的是,使用astype时总是生成一个新数组,即使传入的dtype与之前相同。

微生物基因组–细菌基因组如何变化

1,要认识到,我们测序得到的基因组序列AGCT的排列只不过代表微生物漫长岁月中的某一瞬间,不能代表过去无限远。
2,我们还要认识到,大部分基因的突变是中性的,而可以检测到的突变率是通常低于真实突变率的,因为一些致死突变会使细菌直接死掉而不能被检测到。
3,随机遗传漂移(在一个种群中,某种突变频率的增加或减少完全是由偶尔因素造成的)也是在检测基因组改变时需要考虑的,它经常在小群体中起主要作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值