Python中的Numpy(Numerical Python)是一个开源的数值计算库,它是Python数据分析的基础库之一。而ndarray是Numpy中用于处理多维数组的核心类,提供了许多常用的操作方法,支持矢量化运算,性能优越,因此被广泛应用于科学计算、机器学习等领域。本文就来介绍一些Python中ndarray的常用操作和应用场景。
一、创建数组
我们可以使用numpy中的array()函数创建一个ndarray对象,这个函数接受一些序列作为输入(列表、元组),生成一个numpy数组。数组的维度通过序列中元素的嵌套深度来确定。
import numpy as np arr = np.array([1, 2, 3]) # 一维数组 print(arr) # 输出:[1 2 3] arr = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 print(arr) # 输出:[[1 2 3] # [4 5 6]] arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # 三维数组 print(arr) # 输出:[[[1 2] # [3 4]] # # [[5 6] # [7 8]]]
我们也可以使用Numpy中一些特殊的函数来创建一些常见的数组,比如全0数组、全1数组和单位矩阵等。
import numpy as np arr_zero = np.zeros((2, 3)) print(arr_zero) # 输出:[[0. 0. 0.] # [0. 0. 0.]] arr_one = np.ones((2, 3)) print(arr_one) # 输出:[[1. 1. 1.] # [1. 1. 1.]] arr_eye = np.eye(3) print(arr_eye) # 输出:[[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]
二、索引和切片
访问ndarray中的元素可以通过索引和切片进行操作。例如,可以使用中括号内的索引来访问二维数组中的元素。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr[0, 0]) # 输出:1 print(arr[0, 1]) # 输出:2 print(arr[1, 1]) # 输出:5
我们也可以使用切片来获取一部分数组。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[1:4]) # 输出:[2 3 4] arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr[:2, 1:]) # 输出: # [[2 3] # [5 6]]
三、形状操作
我们可以使用ndarray对象的shape属性来获取数组的形状,也可以使用reshape()方法对数组的形状进行操作。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # 输出:(2, 3) arr = np.array([1, 2, 3, 4, 5, 6]) arr = arr.reshape(2, 3) print(arr) # 输出:[[1 2 3] # [4 5 6]]
通过reshape()方法,我们可以将一个数组改变成我们想要的形状。
四、常用函数
Numpy提供了很多常用的函数,例如排序函数、聚合函数、广播函数等。
(1)排序函数
数组排序是数据处理中的重要任务之一,Numpy提供了sort()函数来对数组进行排序,并且可以由小到大或由大到小排序。
import numpy as np arr = np.array([3, 1, 4, 2, 5]) arr = np.sort(arr) # 由小到大排序 print(arr) # 输出:[1 2 3 4 5]
(2)聚合函数
对数组的聚合操作是很常见的操作,Numpy提供了很多聚合函数,例如sum()、max()、min()、mean()等。
import numpy as np arr = np.array([2, 4, 6, 8]) sum = np.sum(arr) max = np.max(arr) min = np.min(arr) mean = np.mean(arr) print(sum, max, min, mean) # 输出:20 8 2 5.0
(3)广播函数
广播是Numpy中很重要的一个机制,它可以用来对形状不同但是满足一定条件的数组进行运算。
import numpy as np A = np.array([[1, 2], [3, 4], [5, 6]]) B = np.array([10, 20]) result = A * B.reshape(2, 1) print(result) # 输出:[[10 20] # [60 80] # [150 180]]
在这个例子中,B数组被扩展成一个3x2的数组,然后与A数组进行逐元素的乘法运算。这个功能在机器学习中非常常见。
五、应用场景
ndarray被广泛应用于科学计算、机器学习等领域。在这里,我们介绍一些常见的应用场景。
(1)图像处理
在图像处理中,常常需要用到ndarray来对图像进行表示和处理。例如,我们可以使用opencv库读取一张图像,然后将图像转化为numpy数组,进行处理和显示。
import cv2 import numpy as np img = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE) # 读取图像,转成灰度图像 img_arr = np.array(img) # 将图像转换成数组 print(img_arr.shape) # 输出:(512, 512) cv2.imshow('Image', img_arr) # 显示图像 cv2.waitKey(0) cv2.destroyAllWindows()
(2)机器学习
在机器学习中,数据通常都是以数组的形式存储和处理的。ndarray能够满足机器学习的需要,支持矢量运算,提高了计算效率。例如,我们可以用ndarray来存储和处理训练数据和标签数据。
import numpy as np # 加载训练数据和标签数据 train_data = np.load('train_data.npy') train_label = np.load('train_label.npy') # 数据预处理 train_data = train_data.astype('float32') / 255.0 train_label = train_label.astype('int32')
(3)科学计算
在科学计算中,数组的处理是非常常见的。例如,我们可以使用ndarray来处理一些大量的科学数据,如物理实验数据、气象数据等。
import numpy as np data = np.genfromtxt('data.csv', delimiter=',') # 从CSV文件中读取数 mean = np.mean(data) # 计算平均值 std = np.std(data) # 计算标准差 print('Mean:', mean) print('Std:', std)
这个例子中,我们从CSV文件中读取数据,然后计算数据的平均值和标准差。这个方法在分析一些大量数据的时候非常实用。