人工智能之NumPy库(超详细)

NumPy是Python中用于处理多维数据的库,它提供了丰富的数组对象和数学操作。文章介绍了NumPy的基础,包括标量、向量、矩阵和张量的概念,以及ndarray的属性如秩、形状和数据类型。还详细讲解了如何创建和访问数组,使用ufunc函数,矩阵创建,如使用np.vstack和np.hstack进行数组堆叠,以及矩阵乘法、加法、迹和行列式的计算。此外,文章还涵盖了线性方程组的求解和概率统计相关操作,如平均值、方差和标准差的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NumPy简介

numpy高效的处理数据,提供数组的支持,python默认没有数组。pandas、scipy、matplotlib都依赖numpy。
    pandas主要用于数据挖掘,探索,分析
    maiplotlib用于作图,可视化
    scipy进行数值计算,如:积分,傅里叶变换,微积分
    statsmodels用于统计分析
    Gensim用于文本挖掘
    sklearn机器学习, keras深度学习

Numpy是一个Python包,它代表“Numeric Python”.它是一个有多维数组对象和用于处理数组的集合组成的库。Numeric,即Numpy的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

标量(scalar):一个标量就是一个单独的数标量通常被赋予小写的变量名称。
向量(vector):一个向量是一列数,这些数是有序排列的,通过次序中的索引,我们可以确定每个单独的数,通常被赋予向量粗体的小写变量名称。
矩阵(matrix):矩阵是具有相同特征和纬度的对象的集合,表现为一张二维数组。
张量(tensor):超过两维的数组。一般的,一个数组中的元素分布在若干为坐标的空间中,将其称为张量。

Numpy基础

Numpy的主要对象是同种元素的多维数组,这是一个所有的元素都是一种类型,通过一个正整数元素索引的元素表格,在Numpy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank).

例如,在一个3D空间一个点的坐标[1,2,3]是一个秩为1的数组因为它只有一个轴。那个轴长度为3

[[1.,0.,0.],         # 此数组的秩为2,(因为它有两个维度)第一个维度长度为2,第二个维度长度为3
 [0.,1.,2.]]

Numpy的数组类被称为ndarray,通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组提供少量功能。而ndarray对象属性有:

  • nsarray.ndim:数组轴的个数,在Python世界中,轴的个数被称作秩。
  • ndarray.shape:数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或ndim属性。
  • ndarray.size数组元素的总个数,等于shape属性中元组元素的乘积。
  • ndarray.dtype一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准python类型,另外Numpy提供它自己的数据类型。
  • ndarray.itemsize数组中每个元素的字节大小。例如:一个元素类型为float64的数组itemsize属性值为8(=64/8)。
  • ndarray.data包含实际数组元素的缓冲区,通常不使用这个属性,因为我们总是通过索引来使用数组中的元素。
import numpy as np

a = np.arange(15).reshape(3,5)
print(a)      # [[ 0  1  2  3  4],[ 5  6  7  8  9],[10 11 12 13 14]]
print(a.shape)    # (3, 5)
print(a.ndim)     # 2
print(a.dtype.name)     # int32
print(a.itemsize)     # 4
print(a.size)       # 15

ndarray对象创建事例

#利用嵌套序列(一组等长列表组成的列表),将生成多维数组
In [4]: arr1=np.array([[1, 2], [3, 4]])
In [4]: arr1
Out[4]: 
array([[1, 2],
       [3, 4]])
In [3]: np.array([1, 2, 3],ndmin=2)
Out[3]: array([[1, 2, 3]])
#从子类中产生一个数组:
In [3]: np.array(np.array([1, 2, 3]), subok=True)
Out[76]: array([1, 2, 3])

#每个数组都有一个shape(一个表示各维度大小的元组) :
In [6]: arr1=np.array([[1, 2], [3, 4]])
In [6]: arr1.shape
Out[6]: (2,2)

#可以利用numpy的reshape 或ndarray类的reshape方法更改数组维度大小
a.reshape(shape, order='C')
reshape(a, newshape, order='C')
shape:表示新数组形状大小的整数或元组  # a.reshape(3,2)
newshape:表示新数组形状大小的元组    #np.reshape(a,(3,2))

备注:新数组不会更改原数组的数据

#可以利用ndarray的astype方法转换数组数据类型:
astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
dtype: 需要转换的类型

In [7]: arr1=np.array([[1, 2], [3, 4]])
In [7]: arr1.astype(np.float)
Out[7]: 
array([[1., 2.],
       [3., 4.]])
arange([start,] stop [, step,], dtype=None)

函数功能:在start,stop间生成一个间隔为step等差数列的一维数组;
参数说明:
start : 数组的起始数据,包含该数据,可省略,若省略起始值为0;
stop:    数组的截至数据,不包含该数据;
step:    数组数据间的间隔.可省略,缺省为1;
dtype:  生成数组中数据的类型

返回值:  ndarray 对象

In [10]: np.arange(1,6,2)
Out[10]: array([1, 3, 5])

In [10]: np.arange(1,6)
Out[10]: array([1, 2,3,4,5])
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

功能:在start,stop间生成一个数量为num的等差数列的一维数组;
参数说明:
start :  生成数组的起始数据,
stop:    生成数组的截至数据,是否包含该数据取决endpoint的值;
num:     生成数组中数据个数;
endpoint:生成数组的截至数据是否包含stop,true 包含,否则不
         包含;
re
### NumPy人工智能中的使用方法和应用场景 #### 1. 数组运算与数据处理 NumPy 是 Python 中最基础的科学计算之一,其核心功能是对多维数组的支持。通过高效的数组操作,可以显著提升数据预处理的速度和效率[^1]。例如,在机器学习模型训练之前,通常需要对原始数据进行标准化、归一化或其他形式的数据转换。以下是基于 NumPy 的数据标准化实现: ```python import numpy as np def standardize(data): mean = np.mean(data, axis=0) std = np.std(data, axis=0) return (data - mean) / std # 示例数据 data = np.array([[1, 2], [3, 4], [5, 6]]) standardized_data = standardize(data) print(standardized_data) ``` 这种简单的数组操作能够快速完成大规模数据集的预处理。 --- #### 2. 矩阵乘法与线性代数支持 在深度学习和神经网络中,矩阵运算是核心部分。NumPy 提供了强大的线性代数模块 `numpy.linalg` 和内置的矩阵乘法函数 `@` 或者 `np.dot()`,这使得构建复杂的数学模型变得非常方便[^1]。下面是一个简单的两层全连接神经网络前向传播的例子: ```python import numpy as np # 初始化权重和偏置 weights_1 = np.random.randn(3, 2) bias_1 = np.zeros((1, 2)) weights_2 = np.random.randn(2, 1) bias_2 = np.zeros((1, 1)) # 输入数据 input_data = np.array([[1, 2, 3]]) # 前向传播 hidden_layer_output = np.maximum(np.dot(input_data, weights_1) + bias_1, 0) # ReLU激活函数 output = np.dot(hidden_layer_output, weights_2) + bias_2 print(output) ``` 此代码展示了如何利用 NumPy 实现基本的神经网络结构及其正向传递过程。 --- #### 3. 数据堆叠与分割 在实际项目中,经常需要将多个小型张量组合成更大的张量或者反过来拆分大张量。NumPy 提供了一系列工具来满足这些需求,比如水平拼接 (`hstack`)、垂直拼接 (`vstack`) 和切片操作等[^3]。以下是如何使用 `vstack` 将两个二维数组沿竖直方向合并: ```python array1 = np.array([[1, 2], [3, 4]]) array2 = np.array([[5, 6], [7, 8]]) combined_array = np.vstack([array1, array2]) print(combined_array) ``` 这种方法对于批量加载图像或文本特征尤其有用。 --- #### 4. 随机采样与初始化 随机数生成器也是 NumPy 的一大亮点,它允许用户轻松创建各种分布类型的伪随机样本集合。这对于模拟实验条件下的超参数调整至关重要[^1]。例如,可以通过如下方式生成服从标准正态分布的一批初始权值: ```python random_weights = np.random.normal(loc=0., scale=0.1, size=(10, 5)) # shape: (10, 5) print(random_weights.shape) ``` 此外,还可以用来打乱数据顺序以便于交叉验证测试阶段分配子集。 --- #### 5. 性能优化潜力 尽管 TensorFlow 和 PyTorch 这样的专用框架已经接管了许多高层次的任务执行工作流,但在某些情况下仍然可以选择纯 NumPy 来编写自定义算法并获得更好的控制力。由于底层实现了 C/C++ 调用接口,因此即使是在 CPU 上运行也能达到相当可观的表现水准[^2]。 --- ### 结论 综上所述,NumPy 不仅适用于入门级教学材料讲解基础知识概念,而且也能够在生产环境中发挥重要作用。无论是从零搭建原型还是参与大型科研课题研究计划当中,都可以发现它的身影活跃其间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值