您的位置:

Python中ndarray常用操作及应用场景

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文件中读取数据,然后计算数据的平均值和标准差。这个方法在分析一些大量数据的时候非常实用。