欢迎关注”生信修炼手册”!

在numpy中,有一系列对数组进行操作的函数,在使用这些函数之前,必须先了解以下两个基本概念

  1. 副本

  2. 视图

副本是一个数组的完整拷贝,就是说,先对原始数据进行拷贝,生成一个新的数组,新的数组和原始数组是独立的,对副本的操作并不会影响到原始数组;视图是一个数组的引用,对引用进行操作,也就是对原始数据进行操作,所以修改视图会对应的修改原始数组。

在使用函数和方法时,我们首先要明确其操作的是原始数组的副本还是视图,然后根据需要来做选择。一个基本的例子如下

>>> import numpy as np
>>> a = np.arange(12)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.reshape(3,4)
array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>>
>>> a.resize(3,4)
>>> a
array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])

reshape和resize方法都可以改变数组的形状,其中reshape操作的是副本,操作之后,原始数组的形状并没有改变,resize操作的是视图, 操作之后原始数组的形状发生了变化。

常用的是数组操作有以下几种

1. 改变数组维度和形状

一开始已经介绍了reshape和resize方法,可以修改数组的维度和形状,除此之外,ravel和flatten则可以将多维数组转换为一维数组,用法如下

>>> a = np.arange(12).reshape(3, 4)
>>> a
array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
>>> a.ravel(order = 'C')
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.ravel(order = 'F')
array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
>>> a.flatten(order = 'C')
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.flatten(order = 'F')
array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])

2. 数组的转置

数组转置是最高频的操作,在numpy中,有以下几种实现方式

>>> a
array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])>>> a.T
array([[ 0, 4, 8],[ 1, 5, 9],[ 2, 6, 10],[ 3, 7, 11]])>>> a.transpose()
array([[ 0, 4, 8],[ 1, 5, 9],[ 2, 6, 10],[ 3, 7, 11]])>>> a.swapaxes(0, 1)
array([[ 0, 4, 8],[ 1, 5, 9],[ 2, 6, 10],[ 3, 7, 11]])>>> np.rollaxis(a, 1, 0)
array([[ 0, 4, 8],[ 1, 5, 9],[ 2, 6, 10],[ 3, 7, 11]])

3. 数组的连接

将多个维度相同的数组连接为一个数组,实现方式有以下几种

>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
>>> b = np.arange(3)
>>> b
array([0, 1, 2])# 以行进行合并
>>> np.concatenate((a, b.reshape(1, -1)), axis = 0)
array([[0, 1, 2],[3, 4, 5],[6, 7, 8],[0, 1, 2]])>>> np.append(a, b.reshape(1,-1), axis = 0)
array([[0, 1, 2],[3, 4, 5],[6, 7, 8],[0, 1, 2]])>>> np.vstack((a,b.reshape(1,-1)))
array([[0, 1, 2],[3, 4, 5],[6, 7, 8],[0, 1, 2]])
# 以列进行合并
>>> np.concatenate((a, b.reshape(-1, 1)), axis = 1)
array([[0, 1, 2, 0],[3, 4, 5, 1],[6, 7, 8, 2]])>>> np.append(a, b.reshape(-1,1), axis = 1)
array([[0, 1, 2, 0],[3, 4, 5, 1],[6, 7, 8, 2]])>>> np.hstack((a,b.reshape(-1,1)))
array([[0, 1, 2, 0],[3, 4, 5, 1],[6, 7, 8, 2]])

数组的连接要求输入的数组必须为相同维度,而且在对应的轴上尺寸相同,特别需要注意,即使只是在二维数组的基础上增加1行或者1列,也要将添加项调整为二维数组。

4. 数组元素的增加和删除

这里的增加和删除指的是在指定轴的索引上进行操作,用法如下

>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
>>> b = np.arange(3)
>>> b
array([0, 1, 2])
# 在第二行插入新数组
>>> np.insert(a, 1, b, axis=0)
array([[0, 1, 2],[0, 1, 2],[3, 4, 5],[6, 7, 8]])
# 在第二列插入新数组
>>> np.insert(a, 1, b, axis=1)
array([[0, 0, 1, 2],[3, 1, 4, 5],[6, 2, 7, 8]])
# 删除第二行
>>> np.delete(a, 1, axis = 0)
array([[0, 1, 2],[6, 7, 8]])
# 删除第二列
>>> np.delete(a, 1, axis = 1)
array([[0, 2],[3, 5],[6, 8]])

5. 集合操作

>>> a = np.array([0, 1, 2, 3])
>>> b = np.array([2, 3, 4, 5])
# 取交集
>>> np.intersect1d(a, b)
array([2, 3])
# 取a中的差集
>>> np.setdiff1d(a, b)
array([0, 1])
# 取b中的差集
>>> np.setdiff1d(b, a)
array([4, 5])
# 取a和b中差集的合集
>>> np.setxor1d(a, b)
array([0, 1, 4, 5])
# 取a和b的合集
>>> np.union1d(a, b)
array([0, 1, 2, 3, 4, 5])

 6. 数组的排序,去重

# 获取唯一的元素
>>> a = np.array([1, 1, 1, 2, 2, 3, 3, 3, 3])
>>> np.unique(a)
array([1, 2, 3])
# 获取每个元素出现的次数
>>> np.unique(a, return_counts=True)
(array([1, 2, 3]), array([3, 2, 4]))
>>> a1, a2 = np.unique(a, return_counts=True)
>>> for x,y in zip(a1, a2):
... print(x,y)
...
1 3
2 2
3 4
# 排序数组
>>> a = np.array([0, 2, 1, 4, 3, 7, 5])
>>> np.sort(a)
array([0, 1, 2, 3, 4, 5, 7])
>>> a.sort()
>>> a
array([0, 1, 2, 3, 4, 5, 7])

在numpy中,实现同一任务的方式有很多种,牢记每个函数的用法是很难的,只需要挑选几个常用函数数量掌握即可。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

更多精彩

  • KEGG数据库,除了pathway你还知道哪些

  • 全网最完整的circos中文教程

  • DNA甲基化数据分析专题

  • 突变检测数据分析专题

  • mRNA数据分析专题

  • lncRNA数据分析专题

  • circRNA数据分析专题

  • miRNA数据分析专题

  • 单细胞转录组数据分析专题

  • chip_seq数据分析专题

  • Hi-C数据分析专题

  • HLA数据分析专题

  • TCGA肿瘤数据分析专题

  • 基因组组装数据分析专题

  • CNV数据分析专题

  • GWAS数据分析专题

  • 2018年推文合集

  • 2019年推文合集

写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号

numpy中数组操作的相关函数相关推荐

  1. python 矩阵元素赋值_对numpy中数组元素的统一赋值实例

    Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入.今天单独列写相关的知识点,进行总结一下. 先看两个代码片小例子: 例子1: In [2]: arr =np.empty((8, ...

  2. python数组切片赋值_基于numpy中数组元素的切片复制方法

    代码1: #!/usr/bin/python import numpy as np arr1 = np.arange(10) print(arr1) slice_data = arr1[3:5] pr ...

  3. python数组元素赋值_对numpy中数组元素的统一赋值实例

    下面小编就为大家分享一篇对numpy中数组元素的统一赋值实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入. ...

  4. Numpy中数组间运算

    Numpy中数组间运算 1 数组与数的运算     [可以直接进行运算] arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr + ...

  5. jfinal ajax传值,JFINAL+Ajax传参 array 数组方法 获取request中数组操作

    前台代码js var _list =[]; for (var i = 0; i < array.length; i++) { _list[i] = array[i]; } $.ajax({ ty ...

  6. 【NumPy中数组创建】

    目录 一.NumPy是什么? 二.利用array创建数组 三.利用arange创建数组 四.随机数创建数组 五.ndarray对象 六.其他方式创建数组 七.数组的切片与索引 一.NumPy是什么? ...

  7. python/numpy中数组array和矩阵matrix的区别

    在numpy中,array(实际上是ndarray,表示多维数组)是可以有多维度的,而matrix只有两个维度,即行和列.所以matrix是array的一种特例,因而它继承了array的所有函数,同时 ...

  8. numpy中数组维度的理解

    参考 这篇文章主要是为了弄清楚数组按每个维度进行计算时,具体的操作是什么样的. 一.数组中的各个维度表示的是什么? 为了便于理解,用单位体表示,剥去一层中括号后,得到的数据. 1. 以二维数组为例 i ...

  9. python数组去重函数_Python科学计算库Numpy之 数组操作

    操作ndarray 的方法 numpy.reshape:这个函数在不改变数据的条件下修改形状 numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器 ...

最新文章

  1. android IntentService生命周期问题
  2. 请求中文乱码_【1】执行Http请求访问网页
  3. 【推荐系统】面向科研的推荐系统Benchmark诞生!
  4. gson-2.2.api简单
  5. 终于有人把正态分布和二八法则讲明白了
  6. 市场活动课件:SQL Server 索引优化
  7. 基于visual Studio2013解决C语言竞赛题之1083人机博弈
  8. java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
  9. 个人生活助手app_“3·15可信赖应用白名单”发布 360旗下多款APP获评甲级认证
  10. 阿里巴巴2013实习招聘笔试题5月19日
  11. 冒泡法排序(详细注释,易懂)
  12. latex 导出的pdf生成书签 目录
  13. 网易126免费邮箱更改手机号(亲测有效)
  14. 智慧交通规划设计方案解析
  15. 软件开发的心得体会(一)
  16. 2021年海河英才计划天津落户天津最详细过程
  17. android微博图片上传,安卓开发 新浪微博share接口实现发带本地图片的微博
  18. 开启Intel VT-x虚拟化
  19. TLS Handshake failed: tls: server selected unsupported protocol version 301
  20. sql函数DATEPART()与DATENAME()

热门文章

  1. 深蓝色右手的关于silverlight的博客
  2. 互联网公司分布式集群结构解析
  3. 去哪儿网抢火车票方法
  4. 数据库中between的使用方法
  5. xingtai-三国迷的考验
  6. 书论65 祝允明《评书》
  7. python小游戏 贪吃蛇小游戏设计与实现
  8. Linux连接荣耀路由器pro2,荣耀路由pro2设置方法
  9. 【转】您的账户已被停用,请向系统管理员咨询解决办法
  10. 实际例子描述和分析“猎豹抢票跨站推荐功能有票刷不到”的疑似bug