对比 Python 原生切片,讲述 Numpy 数组切片!

1. 本文介绍

今天为大家介绍以下内容:

  • Ⅰ Python原生切片,与numpy数组切片,有哪些不同?
  • Ⅱ numpy中,应该如何使用切片?

2. Python原生切片,与numpy数组切片,有哪些不同?

这里有两个概念,大家需要了解一下。

  • 浅拷贝:相当于B将A的数据,复制了一遍,并在本地从新开了一片内存区域,用于存放B。此时,改变A/B中的数据,并不会影响对方;
  • 视图:相当于B和A共用一块儿内存区域,当改变A/B中的数据,对方也会跟着改变;
① 数组切片,返回的是原始数组的视图

list1 = [1,2,3]
print(list1)
list2 = list1[1:]
print(list2)

# 此时,修改list2中某一个元素,查看原始列表的元素是否发生变化?
list2[0] = 666
print(list2)
print(list1)

结果如下:

可以发现:修改list2中的元素后,list1中的元素并没有改变。

② 原生python切片,返回的是原始数组的浅拷贝
array1 = np.array([1,3,5,2,4])print(array1)array2 = array1[2:]print(array2)

# 此时,修改array2中某一个元素,查看原始数组的元素是否发生变化?array2[0] = 888print(array2)print(array1)

结果如下:

可以发现:修改array2中的元素后,array1中的元素跟着改变了。

③ 调用数组对象的copy方法,实现底层数据的复制,而不是返回底层数据的视图

array3 = np.array([1,2,3,4,5,6])
print(array3)
array4 = array3.copy()
print(array4)

array4[2] = 666
print(array4)
print(array3)

结果如下:

可以发现:修改array4中的元素后,array3中的元素没有变。

3. numpy中,应该如何使用切片?

切片的使用,不管是原生python切片,还是数组切片,语法基本上是相同的。

  • 语法:[start:stop:step]
  • 参数:start代表起始索引,stop代表终止索引,step代表步长;

对于切片,这里有几点需要注意的。

  • 注意1:索引是左臂右开区间,比如说x[0:9:1],只能是取到索引等于0处的元素到索引等于8处的元素,而取不到索引等于9的这个元素。记住元素索引都是0开始的,第一个亓素的索引是0.第一个亓素的索引是1,以此类推下去。
  • 注意2:当不写start代表从起始索引处取数,当不写stop代表一直取数到最后位置。当不写step步长,代表使用默认步长1。
  • 注意3:start、stop、step都可以是负数,具体什么含义,最好在下面的例子中好好体会。

黄同学做了一张图,帮你理解“切片”。

下面用几个例子,来好好练习一下吧!

a = np.arange(10)print(a)             # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

print(a[:3])          # 0 1 2print(a[3:6])         # 3 4 5print(a[6:])          # 6 7 8 9print(a[::])          # 0 1 2 3 4 5 6 7 8 9print(a[:])           # 0 1 2 3 4 5 6 7 8 9print(a[::3])         # 0 3 6 9print(a[1::3])        # 1 4 7print(a[2::3])        # 2 5 8

# 当start、stop、step为负数的时候,理解起来就稍微难一点;print(a[::-1])        # 9 8 7 6 5 4 3 2 1 0print(a[:-4:-1])      # 9 8 7 print(a[-4:-7:-1])    # 6 5 4print(a[-7::-1])      # 3 2 1 0

结果如下:

更多阅读

用 Python 进行 OCR 图像识别

用 XGBoost 进行时间序列预测

5 分钟快速上手 pytest 测试框架

特别推荐

Python量化交易

分享用Python进行量化交易的干货
6篇原创内容
公众号
(0)

相关推荐

  • Python中基础使用及Numpy、Scipy、Matplotlib 使用教程

    本文主要根据 斯坦福CS231n课程的Python 教程进行整理,原文地址为http://cs231n.github.io/python-numpy-tutorial/,官方Python指南网址htt ...

  • Pandas和NumPy的比较

    我们知道Pandas是在NumPy的基础构建而来,因此,熟悉NumPy可以更加有效的帮助我们使用Pandas. NumPy主要用C语言编写,因此,在计算还和处理一维或多维数组方面,它要比Python数 ...

  • 第 81 天:NumPy Ndarray 对象及数据类型

    上一篇文章中我们详细介绍了 NumPy 的功能及用途,本章节着重介绍 NumPy 一个神奇的对象 Ndarray 以及 NumPy 数据类型,包括两者的用途,接下来就开启神奇之旅吧. 标准安装的 Py ...

  • 如何获取numpy数组的真实地址?如何与ctypes数组共享内存?

    如何获取numpy数组的真实地址?如何与ctypes数组共享内存?

  • torch.sigmoid() 与 torch.nn.Sigmoid() 对比 python

    torch.sigmoid() 与 torch.nn.Sigmoid() 对比 python

  • Python使用pip安装Numpy模块

    Python编程学习圈 昨天安装Numpy模块一般有两种安装方法:一:下载模块对应的.exe文件,直接双击运行安装二:下载模块对应的.whl文件,使用pip安装对于exe文件的安装比较简单,都是双击运 ...

  • Python的常用库的数组定义及常用操作

    好奇心Log 今天 以下文章来源于阿宗的科研备忘 ,作者阿宗的科研备忘 Python支持的库非常多,这当然是它的一大优势,但是也会给我们实际应用中造成点小小的麻烦:每个库对于数据的定义和运算处理都不同 ...

  • Python|检查两个字符串数组是否相等

    前言力扣(LeetCode)是一个全球挚爱的计算成长平台.问题描述给两个字符串数组word1和word2.如果两个数组表示的字符串相同,则返回true,否则,返回false.示例1:输入:word1= ...

  • Python科学运算之结构数组

    三体智子 http://www.bizhi88.com/bizhi/320045.html 聊起结构体,其实应该说说C语言的结构体~ 首先接触的C 数组允许定义可存储相同类型数据项的变量,而结构是 C ...

  • Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 numpy中的array格式数据切片与pandas中的dataframe格式数 ...

  • 彻底搞懂Python切片操作

    cgx.jpg写在前面:利用python解决问题的过程中,经常会遇到从某个对象中抽取部分值的情况."切片"操作正是专门用于实现这一目标的有力武器.理论上,只要条件表达式得当,可以通 ...

  • python切片

    在python中,切片是很有用的. 听起来会不会有点恐怖? 一点也不哦. 切切切,切歌的切. 在PS里面也可以切切切哦. 以字符串为例. 1.字符串是python里面很常用的一种数据类型.可以用引号& ...