前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-科学计算-numpy-2-数组(中篇)

Python-科学计算-numpy-2-数组(中篇)

作者头像
zishendianxia
发布2019-10-23 15:44:51
4590
发布2019-10-23 15:44:51
举报
文章被收录于专栏:Python工程师Python工程师

系统:Windows 10 Python: 2.7.9/numpy: 1.9.1

  • 这个系列是教材《Python科学计算(第2版)》的学习笔记
  • 今天讲讲如何从原数组经过下标存取获得新数组

> 写在前面的话


  1. 近来学习的有点卡壳,尤其涉及到对数组的广播处理之后的部分
  2. 当数组的维度变高以后,就开始有点晕了-_-!
  3. 原因可能是分配的学习时间有点不够,另外总想快点整点高大上的东西,基础知识学习的时候往往有点枯燥
  4. 如果针对性的为了解决某个问题,去学习可能效果会更好,当然这个问题与现阶段能力匹配那就很棒,要不很容易有挫败感
  5. 期待下周的时候突破这个瓶颈
  6. 当然这不影响本期的分享内容

Part 1:学习目标

  1. 本次旨在通过对原数组进行下标存取后获得想要的新数组
  2. 下标存取有:切片整数列表整数数组布尔数组
  3. 这四种方法获得新数组是有区别的,从与原数组是否共享内存这块讲解
  4. 主要介绍切片整数数组两种下标存取方式

Part 2:切片

  1. 数组在内存中的存取方式,有两种:C语言格式,Fortran格式,默认为C格式
  2. 数组每一维可以以第几轴表示,二维数组中,想象成一个二维表格,行方向代表0轴,列方向代表1轴
  3. 假设数组a=np.arange(5*5).reshape(5,5),相当于是一个5x5的矩阵,下标从0开始
  4. b=a[1:3,1:4]
    • 表示行(0轴)取第2和第3行,1:3包括1不包括3,即为1,2;因为数组下标是从0开始,实际即第2和第3行;
    • 列(1轴)取第2,3,4列
    • 最终输出为两者的交集
    • 类似于切一块没有厚度的豆腐,行和列各切几刀,最终得到的交集部分就是你最终得到的
  5. 使用这些之前不要忘记导入import numpy as np

切片结果

Part 3:整数数组下标存取

  1. c=np.arange(15,100,20)arange(开始值,终止值,步长),不包括终止值
  2. d=c[np.array([[1,2,3],[2,3,3]])]c最终结果与下标存取采用的数组形状一致
  3. [1,2,3]中的数字表示为原数组a中的下标索引,从0开始

执行结果

Part 4:是否共享内存

  1. 切片方法获得的新数组与原数组共享内存,即新数组只是原数组的一个视图,所以任何一个数组改变,两者都改变
  2. 整数数组下标存取新数组与原数组不共享内存,任何一个数组发生新的改变不会影响彼此
  3. 可以通过flags属性,观察其OWNDATA属性是否为True
  4. 需要注意的是这里数组aOWNDATA属性是False,因为它经过了reshape处理,形状发生了改变,它是np.arange(5*5)的一个视图,读者可以手动测试一下,其实我之前也没注意到,后来写文章时候才发现,所以这个案列举得不够贴切,尴尬,-_-!

执行结果

flags属性

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • > 写在前面的话
  • Part 1:学习目标
  • Part 2:切片
  • Part 3:整数数组下标存取
  • Part 4:是否共享内存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档