微信扫一扫打赏支持

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 [ ]:
 
 
posted @ 2020-10-26 23:51  范仁义  阅读(541)  评论(0编辑  收藏  举报