NumPy疑难问题---1、NumPy切片操作

NumPy疑难问题---1、NumPy切片操作

一、总结

一句话总结:

numpy切片结构:array[start:stop:step,start:stop:step],前面的start:stop:step表示行,后面的start:stop:step表示列,具体细节和python切片操作一样
arr1=np.arange(1,17).reshape((4,4))
print(arr1)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

print(arr1[1:3,1::2])
[[ 6  8]
 [10 12]]

1、NumPy切片操作和Python切片操作 的区别?

Python切片操作是一组start:stop:step,NumPy切片操作有两组start:stop:step,前一组表示对行进行操作,后一组表示对列进行操作,具体使用细节都是一样的。

Python切片操作一般是对一维的列表、元组、字符串等进行切片,所以是一组start:stop:step。

NumPy切片操作 一般是对多维数组进行切片,所以有两组start:stop:step,前一组表示对行进行操作,后一组表示对列进行操作。

具体使用细节都是一样的:索引和步长都是有正有负,效果都一样。

二、NumPy切片操作

博客对应课程的视频位置:1、NumPy切片操作-范仁义-读书编程笔记
https://www.fanrenyi.com/video/44/378

numpy切片结构:

array[start:stop:step,start:stop:step]
前面的start:stop:step表示行,后面的start:stop:step表示列

numpy切片使用规则和python中的切片非常相似,start和stop索引有正有负,step也可正负

表示行时,step为正表示从上往下,step为负表示从下往上,step的绝对值表示步长
表示列时,step为正表示从左往右,step为负表示从右往左,step的绝对值表示步长

我们以如下数组为例进行讲解

NumPy切片操作和Python切片操作 的区别

Python切片操作一般是对一维的列表、元组、字符串等进行切片,所以是一组start:stop:step。

NumPy切片操作 一般是对多维数组进行切片,所以有两组start:stop:step,前一组表示对行进行操作,后一组表示对列进行操作。

具体使用细节都是一样的:索引和步长都是有正有负,效果都一样。
In [1]:
import numpy as np
In [2]:
arr1=np.arange(1,17).reshape((4,4))
print(arr1)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

1、切取单个值

In [3]:
print(arr1[1])
[5 6 7 8]
In [4]:
print(arr1[-1])
[13 14 15 16]
In [5]:
print(arr1[1,1])
6
In [6]:
print(arr1[1,-2])
7

2、读取行

In [7]:
print(arr1[1:3])
[[ 5  6  7  8]
 [ 9 10 11 12]]
In [9]:
print(arr1[1:3:-1])
[]
In [10]:
print(arr1[3:1:-1])
[[13 14 15 16]
 [ 9 10 11 12]]
In [11]:
print(arr1[:1:-1])
[[13 14 15 16]
 [ 9 10 11 12]]
In [12]:
print(arr1[:-3:-1])
[[13 14 15 16]
 [ 9 10 11 12]]
In [13]:
print(arr1[1:])
[[ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
In [14]:
print(arr1[:3:2])
[[ 1  2  3  4]
 [ 9 10 11 12]]
In [15]:
print(arr1[-3:-1])
[[ 5  6  7  8]
 [ 9 10 11 12]]
In [16]:
print(arr1[-3:-1:-1])
[]
In [17]:
print(arr1[-3:3])
[[ 5  6  7  8]
 [ 9 10 11 12]]

3、读取行和列

In [18]:
arr1=np.arange(1,17).reshape((4,4))
print(arr1)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
In [19]:
print(arr1[1:3,1:3])
[[ 6  7]
 [10 11]]
In [20]:
print(arr1[1:3,:1:-1])
[[ 8  7]
 [12 11]]
In [21]:
print(arr1[1:3,-1::-1])
[[ 8  7  6  5]
 [12 11 10  9]]
In [22]:
print(arr1[1:3,1:])
[[ 6  7  8]
 [10 11 12]]
In [23]:
print(arr1[1:3,3::-2])
[[ 8  6]
 [12 10]]
In [24]:
print(arr1[:,1::2])
[[ 2  4]
 [ 6  8]
 [10 12]
 [14 16]]
In [25]:
print(arr1[:,:])
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
In [27]:
print(arr1[::,::])
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

4、使用注意

逗号前面的参数省略必须留一个冒号,表示有参数并且省略了,不然会报错

In [26]:
print(arr1[,:])
  File "<ipython-input-26-e911698203d0>", line 1
    print(arr1[,:])
               ^
SyntaxError: invalid syntax
In [28]:
print(arr1[,])
  File "<ipython-input-28-204ce1458cbd>", line 1
    print(arr1[,])
               ^
SyntaxError: invalid syntax
In [ ]:
 
 
我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
博主25岁,前端后端算法大数据人工智能都有兴趣。
大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
聊技术,交朋友,修心境,qq404006308,微信fan404006308
26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
人工智能群:939687837

作者相关推荐

原文地址:https://www.cnblogs.com/Renyi-Fan/p/13882220.html