欢迎关注”生信修炼手册”!
numpy是python的一个第三方模块,以多维数组对象为核心,提供了强大的科学计算能力和超快的运行速度,常和scipy, matplotlib等模块一起协同作用,是python中科学计算相关的基础模块。
numpy中的多维数组称之为ndarray, 是由一系列相同数据类型的对象构成的集合。在numpy中,最基本的构建矩阵的方法是通过array函数,用法如下
>>> import numpy
>>> a = numpy.array([1, 2, 3])
>>> type(a)
>>> numpy.array([(1, -2, 2), (3, 2, 0)])
array([[ 1, -2, 2],
[ 3, 2, 0]])
对于多维数组,有以下基本属性和操作方法
1. 基本属性
numpy中的数组具有维度,数据类型等基本属性,示例如下
>>> a = numpy.array([(1, -2, 2), (3, 2, 0)])
>>> a
array([[ 1, -2, 2],
[ 3, 2, 0]])
# 数组的维度,这里是2维数组
>>> a.ndim
2
# 返回值为一个元组,记录每个维度的尺寸
>>> a.shape
(2, 3)
# 数组中元素的总数
>>> a.size
6
# 数组中元素的基本数据类型
>>> a.dtype
dtype('int32')
2. 构建方法
numpy中多维数组的构建方式有多种,示例如下
# 类似内置的range函数
# 创建等差数列
>>> np.arange(1, 6)
array([1, 2, 3, 4, 5])
# 设置步长
>>> np.arange(1, 10, 3)
array([1, 4, 7])
# 和arange不同,指定生成的元素个数,然后自动划分步长
>>> np.linspace(0, 8, 3)
array([0., 4., 8.])
# reshape重新定义矩阵维度
>>> a = numpy.arange(6).reshape(3, 2)
>>> a
array([[0, 1],
[2, 3],
[4, 5]])
# 初始化一个矩阵,全部用0填充
>>> np.zeros((2, 4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 初始化一个矩阵,全部用1填充
>>> np.ones((2, 4))
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
# 初始化一个矩阵,用随机数进行填充
>>> np.empty((2, 3))
array([[-5.22979145e-299, 1.28420031e+294, 1.96049329e+289],
[-4.00921237e-294, 3.60935879e+207, 1.31819562e+294]])
3. 切片
numpy中的矩阵可以进行切片,一维数组的切片操作和普通的python序列对象相同,用法如下
>>> a = numpy.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[2]
2
>>> a[2:5]
array([2, 3, 4])
>>> a[:6:2] = -1
>>> a
array([-1, 1, -1, 3, -1, 5, 6, 7, 8, 9])
>>> a[::-1]
array([ 9, 8, 7, 6, 5, -1, 3, -1, 1, -1])
>>> for i in a:
... print(i)
...
-1
1
-1
3
-1
5
6
7
8
9
多维数组在每个维度上都可以进行切片,以二维数组为例,示例如下
>>> a = numpy.arange(25).reshape(5,5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>>
# 访问第二行,第三列对应的元素
>>> a[2, 3]
13
# 访问1到5行,第一列对应的元素
>>> a[0:5, 1]
array([ 1, 6, 11, 16, 21])
# :表示取所有的元素
>>> a[1:3, :]
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
# 也可以直接不写,默认就是取所有元素
>>> a[1:3]
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
4. 矩阵运算
numpy可以方便的进行向量运算和矩阵操作,用法示例如下
>>> a = np.arange(1, 6)
>>> a
array([1, 2, 3, 4, 5])
# 向量操作,加减乘除
>>> a - 1
array([0, 1, 2, 3, 4])
>>> a + 2
array([3, 4, 5, 6, 7])
>>> a * 3
array([ 3, 6, 9, 12, 15])
>>> a / 2
array([0.5, 1. , 1.5, 2. , 2.5])
# 矩阵运算,乘法
>>> a = np.arange(6).reshape(2, 3)
>>> b = np.arange(9).reshape(3, 3)
>>> a @ b
array([[15, 18, 21],
[42, 54, 66]])
>>> a.dot(b)
array([[15, 18, 21],
[42, 54, 66]])
除了以上基本概念外,numpy还提供了丰富的矩阵操作的方法和函数,后续再详细介绍。
·end·
—如果喜欢,快分享给你的朋友们吧—
原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
更多精彩
KEGG数据库,除了pathway你还知道哪些
python专题 | 基础入门篇
全网最完整的circos中文教程
DNA甲基化数据分析专题
突变检测数据分析专题
mRNA数据分析专题
lncRNA数据分析专题
circRNA数据分析专题
miRNA数据分析专题
单细胞转录组数据分析专题
chip_seq数据分析专题
Hi-C数据分析专题
HLA数据分析专题
TCGA肿瘤数据分析专题
基因组组装数据分析专题
CNV数据分析专题
GWAS数据分析专题
2018年推文合集
2019年推文合集
写在最后
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。
扫描下方二维码,关注我们,解锁更多精彩内容!
一个只分享干货的
生信公众号