numpy 中的切片与数组中的切片类似。

数组 [ 起始:终止:步长, 起始:终止:步长, ... ]

所有的切片操作(无论是步长为+的正序,还是步长为 - 的逆序)都是开始位置包含,结束位置不包含(终止位省略时则包含);可以借助于range函数辅助理解。

每一个维度之间采用 “ 逗号 ” 间隔,逗号之间的 ::则表示每一个维度的分割方式。

每一个维度的分割与数组的分割原理一致;

具体实现方式存在差异的是:在某个维度全部使用缺省值时可以用 “ . . .”  表示

值的省略说明

1)起始值:从首位算起

2)终止值:在末尾结束

3)步长值:默认为1

1 关于切片的基本操作方式

实例一:

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

详细如下所示

实例二:

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

详细如下

当起止顺序反向时,输出为 空 [ ]

实例三:

import numpy as np

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

2 关于切片的高级操作

实例一:

import numpy as np

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('-----------')
print(b[:,0,0]) #[ 1 13]
# 第一个逗号是页的切片,也即页的切片从头到尾;
# 第二个 0 表示行列式的第一行
# 第二个 0 表示行列式的第一列
# 所以每页取出第一行第一列元素,也即 1 13 两个元素 

运行

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
-----------
[ 1 13]

实例二:

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('----------------')
print(b[0,:,:]) #表示第 0 页,第 1 页的行取所有,第 1 页的列取所有
print('----------------')
print(b[0,...]) #...表示第 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]]]
----------------
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
----------------
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

实例三:

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('---------')
print(b[0,1,::2]) #5 7
# 表示第0页;第1行;从头到尾,步长为 2 ;

运行

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
---------
[5 7]

实例四:

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('---------')

print(b[...,1]) #第一列

运行

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
---------
[[ 2  6 10]
 [14 18 22]]

实验五:

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('---------')

print(b[:,1])
# 每一列的第一行(起始为0行),
# 省略最后一个逗号等价于 print(b[:,1,])

运行

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
---------
[[ 5  6  7  8]
 [17 18 19 20]]

实例六:

b = np.arange(1,25).reshape(2,3,4)
print(b)
print('---------')

print(b[-1,1:,2:])
# 首不写表示从头开始,尾不写代表到尾结束。
# 第一个逗号:-1 表示末尾第一个,
# 自左(前)到右(后)起于0,从右(后)到左(前)起于1。
# 第二个逗号:1:从第1行到末尾,
# 第三个逗号:2:从第2行到末尾,
# 最后选取数组中的一部分。

运行

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
---------
[[19 20]
 [23 24]]

numpy 切片的更多相关文章

  1. NumPy 切片和索引

    NumPy 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样. ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以 ...

  2. NumPy切片和索引

    NumPy - 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样. 如前所述,ndarray对象中的元素遵循基于零的索引. 有三种可用的索引方 ...

  3. numpy切片和布尔型索引

    numpy 标签(空格分隔): numpy 数据挖掘 切片 数组切片是原始数组的视图.这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上 In [16]: arr Out[16]: arr ...

  4. 5、numpy——切片和索引

    1.一维数组 1.1 一维数组很简单,基本和列表一致.ndarray 数组可以基于 0 - n 的下标进行索引. 切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step ...

  5. 吴裕雄--天生自然Numpy库学习笔记:NumPy 切片和索引

    ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组. import ...

  6. Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)

    一:数组的属性 每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型) 二:数组索引 和python列表一样,N ...

  7. NumPy的详细教程

    原文  http://blog.csdn.net/lsjseu/article/details/20359201 主题 NumPy 先决条件 在阅读这个教程之前,你多少需要知道点python.如果你想 ...

  8. Numpy学习笔记(二)

    (1)NumPy - 切片和索引 l  ndarray对象中的元素遵循基于零的索引. 有三种可用的索引方法类型: 字段访问,基本切片和高级索引. l  基本切片 Python 中基本切片概念到 n 维 ...

  9. Python NumPy学习总结

    一.NumPy简介 其官网是:http://www.numpy.org/ NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Num ...

随机推荐

  1. redis 安装报错

    CentOS 6.5 安装 Redis 执行 make #error "Newer version of jemalloc required" 根据你系统安装时或之后安装的选项的情 ...

  2. linux:C++实现ping

    转载自: //http://blog.chinaunix.net/uid-25909722-id-2762079.html #include <stdio.h> #include < ...

  3. SDE操作的许可问题

    ArcGIS二次开发和ArcGIS桌面应用中,许可是一个老生常谈的问题.以前也小结过一些经验.参考: http://www.cnblogs.com/liweis/p/4185311.html 问题描述 ...

  4. 【转】 Java多态特性:重载和覆写的比较

    Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void ...

  5. poj 3042 Grazing on the Run

    这个题目原型应该是吃完所有的草丛的最小时间,现在变成了每个草丛被吃的时间和,貌似如果还是按照原来的dp方法dp[i][j]表示吃完i到j的草丛的花掉的时间的话,有两个因素会影响后面的决策,一个是花掉的 ...

  6. 通过16道练习学习Linq和Lambda

    http://kb.cnblogs.com/page/73528/ 1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class fro ...

  7. Win10下安装Ubuntu16.04虚拟机并搭建TensorFlow1.3环境

    本文具体参考资料链接 1.VMware下载安装 百度输入VMware搜索,出现如下界面,点击下载: 此处安装步骤可以网上搜索,也可不用搜索,直接按照按照提示一步一步确认即可完成. 2.Ubuntu16 ...

  8. string format 格式化小数位

    String具体的格式化数据的方法 int a = 12345678;格式为sring输出Label1.Text = string.Format("asdfadsf{0}adsfasdf&q ...

  9. InfluxDB和MySQL的读写对比测试

    今天进行了InfluxDB和MySQL的对比测试,这里记录下结果,也方便我以后查阅. 操作系统: CentOS6.5_x64InfluxDB版本 : v1.1.0MySQL版本:v5.1.73CPU ...

  10. 由一次 symbol lookup error 引发的思考

    开发一个跨平台的项目的时候,大部分时候都是在VS下进行编码,所以也就使用了VS的解决方案来管理项目. 因为要跨平台,当时网上看scons这个工具不错,所以在linux下就使用了scons来作为编译脚本 ...