Python中数组切片的用法实例详解
作者:Yale曼陀罗 发布时间:2022-09-18 16:51:42
一、python中“::-1”代表什么?
在Python中::-1
表示将字符或数字倒序输出
(也称【反转】)。
举个栗子,当line = "abcde"时,使用语句line[::-1]
,最后的运行结果为:‘edcba’。
二、python中“:”的用法
在Python中a[i:j]
表示复制字符串或数字从a[i]到a[j-1]
(也称【切片】)。 当切片中,i
或 j
的位置被“:
”替换时,切片结果如下:
当
i
缺省时,默认为i=0
,即 a[:3]相当于 a[0:3];当
j
缺省时,默认为j=len(a)
, 即a[1:]相当于a[1:10];当
i,j
都缺省时,a[::]
就相当于完整复制一份a。
备注:上例中,假设 a = [0,1,2,3,4,5,6,7,8,9]。
参考:python中::-1代表什么?
在Python中::-1表示将字符或数字倒序输出。举个栗子,当line = "abcde"时,使用语句line[::-1],最后的运行结果为:'edcba'。下面请看详细解释。
一、反转
::-1涉及到将数字或字符倒序输出
二、详解
1、i:j
a = [0,1,2,3,4,5,6,7,8,9]
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
b = a[1:3] 那么,b的内容是 [1,2]
当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
当i,j都缺省时,a[:]就相当于完整复制一份a了举个栗子:
line = "abcde"
line[:-1]
结果为:'abcd'2、::-1
b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.
所以a[i:j:1]相当于a[i:j]
当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。所以你看到一个倒序的东东。举个栗子:
line = "abcde"
line[::-1]
结果为:'edcba'
line[:-1]其实就是去除了这行文本的最后一个字符(换行符)后剩下的部分。实际上问题不难,你自己动手运行一下就会非常清楚。
三、python中数组切片
1、NumPy 数组正切片的规则:
python 中【切片】的意思是将元素从一个给定的索引带到另一个给定的索引。
我们像这样传递切片而不是索引:
[start:end]
。我们还可以定义
步长
,如下所示:[start:end:step]
。
备注:
如果我们不传递 start,则将其视为 0。如果我们不传递 end,则视为该维度内数组的长度。如果我们不传递 step,则视为 1。
numpy中一维数组切片:
a=np.array([1,2,3,4,5])
print(a)
>>>
array([1, 2, 3, 4, 5])
# 切片
print(a[0])#查询
>>>
1
print(a[1:3])#切片
>>>
[2 3]
numpy中二维数组切片:
a = np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
print(a[0,3])#第一行,第四列
>>>
4
print(a[:,3])#第四列
>>>
[ 4 8 12]
print(a[0,:])#第一行
>>>
[1 2 3 4]
"""
对数组使用均值函数mean()
"""
print(a.mean(axis=1))#计算同一列下,每一行各数字的平均值
>>>
[ 2.5 6.5 10.5]
print(a.mean(axis=0))#计算同一行下,每一列各数字的平均值
>>>
[5. 6. 7. 8.]
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5]) # 裁切索引 1 到索引 5(不包括)的元素
>>>
[2 3 4 5]
print(arr[4:]) # 裁切数组中索引 4 到结尾的
>>>
[5 6 7]
print(arr[:4]) # 裁切从开头到索引 4(不包括)的元素
>>>
[1 2 3 4]
2、NumPy 数组的负切片的规则:
使用减号运算符从末尾开始引用索引:[-start:-end]
。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# 从末尾开始的索引 3 到末尾开始的索引 1,对数组进行切片:
print(arr[-3:-1])
>>>
[5 6]
3、NumPy 数组的使用【STEP步长】切片的规则:
使用 step 值确定切片的步长:[start: end: step]
。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5:2]) # 从索引 1 到索引 5,返回相隔的元素
>>>
[2 4]
print(arr[::2])# 返回数组中相隔的元素
>>>
[1 3 5 7]
3、NumPy 数组中 2-D 数组的切片规则:
从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片。 结果的示例如下:
import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[1, 1:4]) # 从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片
>>>
[7 8 9]
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。
三、numpy中的整数数组索引
numpy中的整数数组索引的切片规则:
以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。
import numpy as np
x = np.array([[1,2],[3,4],[5,5]])
y = x[[0,1,2],[0,1,0]]
print(y)
>>>
[1 4 5]
x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
x
>>>
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
# 切片模式一:输出结果写入单列表
rows = np.array([0,3,0,3])
cols = np.array([0,0,2,2])
y = x[rows,cols]
print(y)
>>>
[ 0 9 2 11]
# 切片模式二:输出结果写入二维数组
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print(y)
>>>
[[ 0 2]
[ 9 11]]
# 切片模式二:输出结果写入2*3的数组
rows = np.array([[0,0,1],[3,2,3]])
cols = np.array([[0,2,1],[0,1,2]])
y = x[rows,cols]
print(y)
>>>
array([[0, 2, 1],
[0, 1, 2]])
四、numpy中借助【切片 : 或 …与索引数组】组合进行复杂切片
借助切片 : 或 … 与索引数组组合。如下面实例:
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
a
>>>
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = a[1:3,1:3]
b
>>>
array([[5, 6],
[8, 9]])
c = a[1:3,[1,2]]
c
>>>
array([[5, 6],
[8, 9]])
d = a[...,1:] # arr[..., 1] 等价于 arr[:, :, 1]
d
>>>
array([[2, 3],
[5, 6],
[8, 9]])
五、布尔索引
我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
一、以下实例获取大于 5 的元素:
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print (x)
>>>
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
print (x[x > 5]) # 现在我们会打印出大于 5 的元素
>>>
[ 6 7 8 9 10 11]
二、以下实例使用了 ~(取补运算符)来过滤 NaN。
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])
>>>
[ 1. 2. 3. 4. 5.]
三、以下实例演示如何从数组中过滤掉非复数元素。
import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print (a[np.iscomplex(a)])
>>>
[2.0+6.j 3.5+5.j]
六、花式索引
花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;
如果目标是二维数组,那么就是对应下标的行。
import numpy as np
x=np.arange(32).reshape((8,4))
print (x[[4,2,1,7]]) # 传入顺序索引数组
>>>
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]
print (x[[-4,-2,-1,-7]]) # 传入倒序索引数组
>>>
[[16 17 18 19]
[24 25 26 27]
[28 29 30 31]
[ 4 5 6 7]]
print (x[np.ix_([1,5,7,2],[0,3,1,2])]) # 传入多个索引数组(要使用np.ix_)
>>>
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]
原理:
np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系
举个例子:
将输入数组[1,5,7,2]和数组[0,3,1,2]产生笛卡尔积,就是得到(1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);
就是按照坐标(1,0),(1,3),(1,1),(1,2)取得 x所对应的元素4,7,5,6,(5,0),(5,3),(5,1),(5,2)取得 x 所对应的元素20,23,21,22…以此类推。
import numpy as np
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])
>>>
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]
来源:https://blog.csdn.net/weixin_42782150/article/details/127014616
猜你喜欢
- 初学tensorflow,如果写的不对的,请更正,谢谢!tf.reshape(tensor, shape, name=None)函数的作用是
- 这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 项目github地址:bitcarmanlee easy-algorithm-interview-and-practice1.Python中
- 1.用管理员打开cmd2.首先通过pip命令安装wheelpip install wheel如果提示'pip'不是内部或外部
- 目录结构:testtest/index.phptest/test_zip.ziptest/test_zip<span style=&q
- 前言go语言并没有面向对象的相关概念,go语言提到的接口和java、c++等语言提到的接口不同,它不会显示的说明实现了接口,没有继承、子类、
- PHP lcfirst() 函数实例把 "Hello" 的首字符转换为小写。:<?php echo lcfirst
- 一、原因:今天在尝试初始化一个WEB应用的时候,发现其连接不上MySQL,从Traceback看到使用的默认密码为‘YES’。没辙,居然尝试
- pyfinance简介在查找如何使用Python实现滚动回归时,发现一个很有用的量化金融包——pyfinance。顾名思义,pyfinanc
- 本文实例为大家分享了JS实现canvas简单小画板的具体代码,供大家参考,具体内容如下Html部分:<!DOCTYPE html>
- Guide to the Section 508 Standards for Electronic and Information Tech
- 本文实例为大家分享了python mysql个人论文管理系统的具体代码,供大家参考,具体内容如下1.mysql数据库建表在mysql数据库里
- 首先要导入JDBC的jar包;接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类Class.forName(xxx
- 从一头雾水到模模糊糊,不明原理,暂时记录一下1.安装Qtcratersudo pacman -S qtcreater2.打开Qtcrater
- 在服务器上训练的网络放到本地台式机进行infer,结果出现报错:AssertionError: Invalid device id仔细检查后
- 排序排序是指以特定格式排列数据。排序算法指定以特定顺序排列数据的方式。最常见的顺序是数字或字典顺序。在 Numpy 中,我们可以使用库中提供
- 前言:发现这篇文章写的有点多,我总结一下整体思路:首先这个功能市面上挺多的,我是参考了几家公司的功能实现,发现他们的整体功能实现和下面我的截
- 在论坛和聊天室这样的场景里,为了保证用户体验,我们经常需要屏蔽很多不良词语。对于单个关键词查找,自然是indexOf、正则那样的方式效率比较
- 本文实例讲述了JavaScript阻止浏览器返回按钮的方法。分享给大家供大家参考。具体分析如下:下面的JS代码可以阻止用户点击返回按钮,非常
- 在使用mysql视图是出现问题: The user specified as a definer ('root'@'