Numpy数组中的通用切片操作

Numpy数组中的通用切片操作

在本文中,我们将介绍NumPy数组中常用的切片操作。切片操作是在数组中选取特定元素的一种方式,它能够方便地对数组进行分块、分割和进行处理。

阅读更多:Numpy 教程

索引

在NumPy数组中,使用索引操作可以选取数组中的单个元素。其语法为arr[index],其中index为元素的位置。

例如,对于一个二维数组arr,我们可以使用arr[0, 0]来选取第一行第一列的元素。

import numpy as np

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(arr[0, 0])  # 输出 0
Python

切片

切片操作是一种选取数组中连续元素的方法,其语法为arr[start:stop:step],其中start为起始索引,stop为结束索引,step为步长。

例如,对于一个一维数组arr,我们可以使用arr[1:4:2]来选取第二个到第四个元素,步长为2。

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5])

print(arr[1:4:2])  # 输出 [1 3]
Python

特别地,若startstep均为省略,则默认为从头开始,步长为1,若stop为省略,则默认为选取到数组末尾。

例如,arr[:5]表示选取数组中前五个元素,arr[2::3]表示选取索引从2开始的元素,步长为3。

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

print(arr[:5])  # 输出 [0 1 2 3 4]
print(arr[2::3])  # 输出 [2 5 8]
Python

多维切片

对于一个多维数组arr,我们可以使用两个分号::将其分为行和列两部分进行切片操作。其语法为arr[start:stop:step, start:stop:step]

例如,对于一个二维数组arr,我们可以使用arr[1:3, ::2]来选取第二到第三行的所有奇数列的元素。

import numpy as np

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(arr[1:3, ::2])  # 输出 [[3 5] [6 8]]
Python

布尔型索引

布尔型索引是一种使用布尔值来选取数组中特定元素的方法。其语法为arr[bool_index],其中bool_index为一个由布尔值组成的数组。

例如,对于一个一维数组arr,我们可以使用arr[arr>3]来选取数组中大于3的元素。

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5])

print(arr[arr>3])  # 输出 [4 5]
Python

注意,布尔型索引的数组必须与被选取的数组具有相同的形状。

花式索引

花式索引是一种使用整数数组来选取数组中特定元素的方法。其语法为arr[index],其中index为一个整数数组。

例如,对于一个一维数组arr,我们可以使用arr[[1, 3, 4]]来选取数组中第二个、第四个和第五个元素。

import numpy asnp

arr = np.array([0, 1, 2, 3, 4, 5])

print(arr[[1, 3, 4]])  # 输出 [1 3 4]
Python

对于多维数组,花式索引也可以分别对行和列进行操作。其语法为arr[index1, index2],其中index1为行的整数数组,index2为列的整数数组。

例如,对于一个二维数组arr,我们可以使用arr[[0, 2], [1, 2]]来选取第一行第二列和第三行第三列的元素。

import numpy as np

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(arr[[0, 2], [1, 2]])  # 输出 [1 8]
Python

数组变形

对于一个数组,我们可以使用reshape()函数将其变换为指定的形状。其语法为arr.reshape(new_shape),其中new_shape为目标形状。

例如,对于一个一维数组arr,我们可以使用arr.reshape(2, 3)将其变换为一个二维数组。

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5])

print(arr.reshape(2, 3))  # 输出 [[0 1 2] [3 4 5]]
Python

注意,数组的原始数据不会被修改,而是返回一个新的数组。

数组拼接

对于两个数组,我们可以使用concatenate()函数将其拼接在一起。其语法为np.concatenate((arr1, arr2), axis=0),其中arr1arr2分别为待拼接的数组,axis为拼接的轴,若axis=0则为纵轴拼接,若axis=1则为横轴拼接。

例如,对于两个一维数组arr1arr2,我们可以使用np.concatenate((arr1, arr2), axis=0)将其在纵轴方向拼接在一起。

import numpy as np

arr1 = np.array([0, 1, 2])
arr2 = np.array([3, 4, 5])

print(np.concatenate((arr1, arr2), axis=0))  # 输出 [0 1 2 3 4 5]
Python

数组分割

对于一个数组,我们可以使用split()函数将其分割成指定的数量。其语法为np.split(arr, indices_or_sections, axis=0),其中arr为待分割的数组,indices_or_sections为要分割的位置或块数,axis为分割的轴。

例如,对于一个一维数组arr,我们可以使用np.split(arr, 3)将其分割成长度为3的三个块。

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5])

print(np.split(arr, 3))  # 输出 [array([0, 1, 2]), array([3, 4]), array([5])]
Python

注意,分割后的数组块也是新的数组。

总结

本文介绍了NumPy数组中常用的切片操作,包括索引、切片、多维切片、布尔型索引、花式索引、数组变形、数组拼接和数组分割。这些操作可以帮助我们快速有效地选取和处理数组中的特定元素,提高代码的效率和可读性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册