【Numpy】01 基础入门:创建和管理多维数组

NumPy基础入门:创建和管理多维数组

简介

NumPy(Numerical Python的简称)是Python语言的一个基础科学计算库,广泛应用于数据分析、机器学习、科学计算和工程领域。NumPy的核心是其强大的N维数组对象ndarray,它为Python提供了一种类似于C语言中数组的数据结构,但比Python原生的列表(list)更高效、功能更丰富。

NumPy数组不仅可以实现高效的数值存储,还能进行快速的数值计算。NumPy提供了大量的数学函数库,包括线性代数、傅里叶变换和随机数生成等,这些功能在数据处理和科学计算中非常实用。

NumPy的数组结构是多维的,这意味着它可以存储和操作一维向量、二维矩阵以及更高维度的数据集。NumPy的数组是同质的,即数组中的所有元素必须是相同的数据类型,这使得NumPy能够以高度优化的方式实现数组操作。

NumPy的性能优势主要来自于其底层使用C语言编写,以及对数组操作的高度优化。NumPy的数组操作通常比纯Python实现快得多,这是因为NumPy的数组操作是直接在内存上进行的,而不需要像Python列表那样进行大量的函数调用。

此外,NumPy还是许多其他科学计算和数据分析库的基础,如Pandas、SciPy、Matplotlib和TensorFlow等,这些库在处理复杂数学运算、数据清洗、可视化和机器学习等方面发挥着重要作用。

NumPy安装与导入

在开始使用NumPy之前,请确保已经安装了这个库。如果未安装,可以通过Python的包管理工具pip来安装:

pip install numpy

安装完成后,就可以在Python脚本中导入NumPy库,并习惯性地将其简写为np

import numpy as np
print(np.__version__)  # 输出NumPy版本信息,例如:1.18.5
N维数组类ndarray

ndarray是NumPy库中最基本的数据结构,它是一个多维数组,可以看作是一个具有额外属性(如形状、数据类型等)的固定类型数据的集合。ndarray对象支持广泛的算术运算,包括逐元素的加法、减法、乘法和除法等。

数组定义概念

  • 数组(Array): NumPy中的数组是一个具有固定类型和形状的元素集合。数组可以是多维的,每个维度称为一个轴(axis)。
  • 维度(Dimension): 数组的维度是指数组的形状,例如一个二维数组可以被想象为一个矩阵。
  • 轴(Axis): 数组的轴是维度的另一个术语,每个轴对应数组的一个维度。在二维数组中,axis=0通常指的是行(垂直方向),axis=1指的是列(水平方向)。
  • 形状(Shape): 数组的形状是一个表示数组在每个维度上大小的元组,例如,形状为(3, 4)的数组意味着有3行4列。

创建数组的参数

创建NumPy数组时,可以使用不同的函数和参数,以下是一些常用的:

np.array(object, dtype=None, copy=True, order='C', subok=False, ndmin=0)

  • object: 要转换为数组的对象,可以是列表、元组等。
  • dtype: 数组的数据类型,NumPy会根据需要自动推断。
  • copy: 布尔值,如果为False,可能不会复制数据,以节省内存。
  • order: 指定数组的内存布局,'C’表示按C语言顺序(行优先),'F’表示按Fortran顺序(列优先)。
  • subok: 布尔值,如果为True,则可能返回数组的子类。
  • ndmin: 整数,指定生成数组的最小维度。
创建NumPy数组

创建NumPy数组非常简单,可以通过np.array函数将Python的列表或元组转换成NumPy数组。例如:

arr1 = np.array([1, 2, 3, 4, 5])  # 创建一维数组
print(arr1)  # 输出:[1 2 3 4 5]
arr2 = np.array([[1, 2, 3], [4, 5, 6]])  # 创建二维数组
print(arr2)  # 输出:
            # [[1 2 3]
            #  [4 5 6]]
NumPy数组属性

NumPy数组对象提供了若干属性,帮助我们更好地了解和操作数组:

  • ndim:数组的维数。
  • shape:数组的形状,表示为一个元组,如(3, 4)表示三行四列。
  • size:数组的总元素个数。
  • dtype:数组元素的数据类型。
  • itemsize:数组每个元素的大小(字节数)。

例如:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print('ndim:', arr.ndim)  # 输出数组的维数:2
print('shape:', arr.shape)  # 输出数组的形状:(2, 3)
print('size:', arr.size)  # 输出数组的总元素个数:6
print('dtype:', arr.dtype)  # 输出数组元素的数据类型:int64
print('itemsize:', arr.itemsize)  # 输出数组每个元素的大小:4(字节)
改变数组形状

reshape方法允许我们在不改变数据的情况下改变数组的形状。例如,将一维数组重塑为二维数组:

arr = np.arange(12)  # 创建0到11的一维数组
arr_reshaped = arr.reshape((4, 3))  # 将数组重塑为4行3列的二维数组
print(arr_reshaped)  # 输出:
                    # [[ 0  1  2]
                    #  [ 3  4  5]
                    #  [ 6  7  8]
                    #  [ 9 10 11]]
创建特定类型的数组

NumPy提供了一系列函数来创建特定类型的数组:

创建特定类型的数组

NumPy提供了多种函数,使得创建特定类型的数组变得简单快捷。以下是一些常用的数组创建函数及其示例。

np.arange

np.arange(start, stop=None, step=1, dtype=None)

  • start: 序列的起始值。
  • stop: 序列的结束值,不包括此值。
  • step: 步长。
  • dtype: 数据类型。

np.arange函数可以从指定的起始值start开始,到结束值stop之前结束(不包括stop),以给定的步长step进行递增。如果不指定step,默认步长为1。

# 使用arange创建0到11的一维数组
arr_arange = np.arange(12)
print(arr_arange)  # 输出:[ 0  1  2  3  4  5  6  7  8  9 10 11]
np.linspace

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • start: 序列的起始值。
  • stop: 序列的结束值。
  • num: 生成的点数。
  • endpoint: 布尔值,如果为True,则包含stop值。
  • retstep: 布尔值,如果为True,则返回值和步长。
  • dtype: 数据类型。

np.linspace函数在指定的起始值start和结束值stop之间创建num个元素的等差数列。默认情况下,endpoint参数为True,意味着包含结束值stop

# 使用linspace创建0到10之间的5个点的等差数列
arr_linspace = np.linspace(0, 10, 5)
print(arr_linspace)  # 输出:[0.  2.5 5.  7.5 10.]
np.logspace

np.logspace函数在对数尺度上创建等比数列,即10**start10**stop之间创建num个元素。这对于对数数据的表示非常有用。

# 使用logspace创建1到10000之间的5个点的等比数列
arr_logspace = np.logspace(1, 5, 5)
print(arr_logspace)  # 输出:[   10.    100.   1000.  10000. 100000.]
np.zeros

np.zeros(shape, dtype=float, order='C')

  • shape: 数组的形状,可以是整数或整数元组。
  • dtype: 数据类型。
  • order: 内存布局顺序。

np.zeros函数创建一个指定形状shape的数组,并将所有元素初始化为0。

# 创建一个形状为3行4列的全0数组
arr_zeros = np.zeros((3, 4))
print(arr_zeros)  # 输出:
                  # [[0. 0. 0. 0.]
                  #  [0. 0. 0. 0.]
                  #  [0. 0. 0. 0.]]
np.ones

np.ones(shape, dtype=None, order='C')

  • shape: 数组的形状。
  • dtype: 数据类型。
  • order: 内存布局顺序。

np.ones函数创建一个指定形状shape的数组,并将所有元素初始化为1。

# 创建一个形状为2行2列的全1数组
arr_ones = np.ones((2, 2))
print(arr_ones)  # 输出:
                 # [[1. 1.]
                 #  [1. 1.]]
np.empty

np.empty(shape, dtype=float, order='C')

  • shape: 数组的形状。
  • dtype: 数据类型。
  • order: 内存布局顺序。
  • 注意:np.empty不会初始化数组元素,数组中的值是未定义的。

np.empty函数创建一个指定形状shape的数组,数组的元素不会被初始化,因此内容是未定义的。

# 创建一个形状为3行2列的未初始化数组
arr_empty = np.empty((3, 2))
print(arr_empty)  # 输出:数组,内容是未定义的(可能是任意值)
np.eye

np.eye函数创建一个二维数组,其中对角线元素设置为1,其余元素为0。可选参数k表示对角线的位置。

# 创建一个3行3列的单位矩阵,对角线右移一个单位
arr_eye = np.eye(3, k=1)
print(arr_eye)  # 输出:
                # [[0. 1. 0.]
                #  [0. 0. 1.]
                #  [0. 0. 0.]]
np.diag

np.diag函数有两种用法:当输入为一维数组v时,它可以创建一个对角线元素为v的方阵;当输入为二维数组时,它可以提取或返回数组的主对角线元素。

# 使用diag从一维数组创建方阵
arr_diag = np.diag([1, 2, 3])
print(arr_diag)  # 输出:
                 # [[1 0 0]
                 #  [0 2 0]
                 #  [0 0 3]]

通过这些函数,我们可以快速创建所需的数组类型,为数据分析和科学计算打下基础。

结论

本教程详细介绍了NumPy的基础知识,包括如何创建和管理多维数组。通过实际的例子,我们看到了如何利用NumPy的强大功能来简化数组操作。理解这些基础概念对于后续进行更高级的数值计算和数据分析至关重要。NumPy不仅提供了数组创建和管理的方法,还为科学计算和数据分析提供了坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值