05 ndarray 切片

目录

 

一、切片方法

二、copy方法复制

三、diag 获取对角线元素

四、unique获取唯一的元素


一、切片方法

我们除了能够一次访问一个元素之外,NumPy 还提供了访问 ndarray 子集的方式,称之为切片。切片方式是在方括号里用冒号 : 分隔起始和结束索引。通常,你将遇到三种类型的切片:

1. ndarray[start:end]
2. ndarray[start:]
3. ndarray[:end]

第一种方法用于选择在start和end索引之间的元素。第二种方法用于选择从start索引开始直到最后一个索引的所有元素。第三种方法用于选择从第一个索引开始直到 end 索引的所有元素。请注意,在第一种方法和第三种方法中,结束索引不包括在内。此外注意,因为 ndarray可以是多维数组,在进行切片时,通常需要为数组的每个维度指定一个切片。

import numpy as np

# 创建一个5行5列的二维数组
arr = np.arange(25).reshape(5, 5)
print('arr = {}\n'.format(arr))

# 选取arr从第2行(含)到第5行(不含),第1列(含)到第4列(不含) 组成的ndarray
A = arr[1:4, 0:3]
print('A = {}\n'.format(A))

# 选取arr从第2行(含)到最后一行(含),第1列(含)到第4列(不含) 组成的ndarray
B = arr[1:, 0:3]
print('B = {}\n'.format(B))

#选取arr从第1行(含)到4行(不含),第3列(含)到第4列(不含) 组成的ndarray
C = arr[:3, 2:3]
print('C = {}\n'.format(C))
#选取arr第三行的所有列组成的 ndarray
D = arr[2, :]
print('D = {}'.format(D))

运行结果:

arr = [[ 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]]

A = [[ 5  6  7]
 [10 11 12]
 [15 16 17]]

B = [[ 5  6  7]
 [10 11 12]
 [15 16 17]
 [20 21 22]]

C = [[ 2]
 [ 7]
 [12]]

D = [10 11 12 13 14]

二、copy方法复制

np.copy(ndarray) 会用ndarray创建一个新的ndarray.

import numpy as np

# 创建一个5行5列的二维数组
arr = np.arange(25).reshape(5, 5)
print('arr = {}\n'.format(arr))

# copy arr的第2行(含)到第5行(不含),第1列(含)到第4列(不含) 到 A
A = np.copy(arr[1:4, 0:3])
print('A = {}\n'.format(A))

#copy A 到 B
B = arr.copy()
print('B = {}\n'.format(B))

运行结果:

arr = [[ 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]]

A = [[ 5  6  7]
 [10 11 12]
 [15 16 17]]

B = [[ 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]]

三、diag 获取对角线元素

np.diag(ndarray, k=N) 函数会以 N定义的对角线提取元素。默认情况下,k=0,表示主对角线。k > 0 的值用于选择在主对角线之上的对角线中的元素,k < 0 的值用于选择在主对角线之下的对角线中的元素。

import numpy as np

# 创建一个5行5列的二维数组
arr = np.arange(25).reshape(5, 5)
print('arr = \n{}\n'.format(arr))

#获取arr主对角线上的元素
A = np.diag(arr, k = 0)
print("A = {}\n".format(A))


#获取arr主对角线之下一行对角线元素
B = np.diag(arr, k = -1)
print("B = {}\n".format(B))

#获取arr主对角线之上一行对角线元素
C = np.diag(arr, k = 1)
print("C = {}\n".format(C))

运行结果:

arr = 
[[ 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]]

A = [ 0  6 12 18 24]

B = [ 5 11 17 23]

C = [ 1  7 13 19]

四、unique获取唯一的元素

import numpy as np

# 创建arr
arr = np.array([[1,2,3],[5,2,8],[1,2,3]])
print('arr = \n{}\n'.format(arr))

#获取arr中的唯一元素
A = np.unique(arr)
print("A = {}\n".format(A))

运行结果:

arr = 
[[1 2 3]
 [5 2 8]
 [1 2 3]]

A = [1 2 3 5 8]

参考文档:https://www.numpy.org/devdocs/user/quickstart.html#changing-the-shape-of-an-array

你可能感兴趣的:(numpy)