24.10.22人工智能Numpy库学习笔记 迭代数组~统计函数

本篇文章中所有代码只给出 def 方法,实际运行需要导包 import numpy as np ,代码中的np实际上指的是numpy

迭代数组

python 复制代码
def arr_nditer():
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr)
    for i in np.nditer(arr, order="C"):
        print(i, end=" ")
    print()
    for y in np.nditer(arr, order="F"):
        print(y, end=" ")
    print()

    # 创建一个三维数组
    # flags 的 multi_index 的使用
    arr02 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    # 使用 nditer 遍历数组并获取多维索引
    it = np.nditer(arr02, flags=['multi_index'])
    for x in it:
        print(f"Element: {x}, Index: {it.multi_index}")

    # 创建一个三维数组
    # flags 的 external_loop的使用
    arr03 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    # 使用 nditer 遍历数组并获取多维索引
    it = np.nditer(arr03, flags=['external_loop'], order="F")
    for y in it:
        print(y)

1数组操作

1.1数组变维

函数名称 函数介绍
reshape 在不改变数组元素的条件下,修改数组的形状
flat 返回是一个迭代器,可以用 for 循环遍历其中的每一个元素
flatten 以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组
ravel 返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)

1.1.1 flat

python 复制代码
def flat_test():
    array_one = np.arange(4).reshape(2,2)
    print("原数组元素:")
    for i in array_one:
        print(i,end=" ")
    print()
    print("使用flat属性,遍历数组:")
    for i in array_one.flat:
        print(i,end=" ")

1.1.2 flatten()

用于将多维数组转换为一维数组。flatten() 返回的是原数组的一个拷贝,因此对返回的数组进行修改不会影响原数组

语法:

复制代码
ndarray.flatten(order='C')

参数

order: 指定数组的展开顺序。

  • 'C':按行优先顺序展开(默认)。

  • 'F':按列优先顺序展开。

  • 'A':如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。

  • 'K':按元素在内存中的顺序展开。

python 复制代码
def arr_flatten():
    arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    print(arr)
    print("--------")
    # flatten 转为一维数组(原数组的拷贝,修改数据不会对原数据有影响)
    arr2 = arr.flatten(order="C")
    print(arr2)
    # 修改 ravel 返回的数组的元素
    arr2[-1] = 20
    print(arr)  # 发现 flatten 返回的数组修改数据,原数组的数据没被修改
    print(arr2)
    print("---------")

1.1.3 ravel()

用于将多维数组转换为一维数组。与 flatten() 不同,ravel() 返回的是原数组的一个视图(view),而不是拷贝。因此,对返回的数组进行修改会影响原数组

python 复制代码
def arr_ravel():
    arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    print(arr)
    print("---------")
    # 降维成为一维数组
    arr1 = arr.ravel(order="C")
    print(arr1)
    # 修改 ravel 返回的数组的元素
    arr1[-1] = 20
    print(arr)  # 发现 ravel 返回的数组修改数据,原数组的数据也被修改
    print(arr1)

1.2 数组转置

函数名称 说明
transpose 将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2)
ndarray.T 与 transpose 方法相同
python 复制代码
def arr_transpose():
    arr = np.arange(1,7).reshape(2,3)
    print(arr)
    arr2 = np.transpose(arr)
    print(arr2)

1.3 修改数组维度

多维数组(也称为 ndarray)的维度(或轴)是从外向内编号的。这意味着最外层的维度是轴0,然后是轴1,依此类推。

函数名称 参数 说明
expand_dims(arr, axis) arr:输入数组 axis:新轴插入的位置 在指定位置插入新的轴(相对于结果数组而言),从而扩展数组的维度
squeeze(arr, axis) arr:输入数的组 axis:取值为整数或整数元组,用于指定需要删除的维度所在轴,指定的维度值必须为 1 ,否则将会报错,若为 None,则删除数组维度中所有为 1 的项 删除数组中维度为 1 的项
python 复制代码
def arr_dims():
    arr = np.arange(1, 7).reshape(2, 3)
    print(arr)
    arr1 = np.expand_dims(arr, axis=2)
    print(arr1)

1.4 连接数组

函数名称 参数 说明
hstack(tup) tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组 按水平顺序堆叠序列中数组(列方向)
vstack(tup) tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组 按垂直方向堆叠序列中数组(行方向)

hstack函数要求堆叠的数组在垂直方向(行)上具有相同的形状。如果行数不一致,hstack() 将无法执行,并会抛出 ValueError 异常。

hstack() 要求堆叠的数组在垂直方向(行)上具有相同的形状。如果列数不一致,将无法执行堆叠操作。

vstack() 和 hstack() 要求堆叠的数组在某些维度上具有相同的形状。如果维度不一致,将无法执行堆叠操作。

python 复制代码
def arr_stack():
    arr11 = np.array([[1, 2, 3], [4, 5, 6]])  # 2*3
    arr12 = np.array([[7, 9], [8, 10]])  # 2 * n
    arr1 = np.hstack((arr11, arr12))  # 垂直方向上连接,行数要匹配
    print(arr1)

    arr21 = np.array([[1, 2, 3], [4, 5, 6]])  # 2 * 3
    arr22 = np.array([[7, 9, 6], [8, 10, 6], [8, 10, 6]])  # n * 3
    arr2 = np.vstack((arr21, arr22))  # 水平方向上连接,列数要匹配
    print(arr2)

1.5 分割数组

函数名称 参数 说明
hsplit(ary, indices_or_sections) ary:原数组 indices_or_sections:按列分割的索引位置 将一个数组水平分割为多个子数组(按列)
vsplit(ary, indices_or_sections) ary:原数组 indices_or_sections:按列分割的索引位置 将一个数组垂直分割为多个子数组(按行)
python 复制代码
def arr_split():
    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    print(arr)
    result = np.hsplit(arr, [1])  # 垂直方向切割
    print(result[0])
    print(result[1])
    result = np.vsplit(arr, [1])  # 水平切割
    print(result[0])
    print(result[1])

2.数组元素的增删改查

2.1 resize

函数名称 参数 说明
resize(a, new_shape) a:操作的数组 new_shape:返回的数组的形状,如果元素数量不够,重复数组元素来填充新的形状 返回指定形状的新数组
python 复制代码
def arr_resize():
    arr = np.arange(6).reshape(2, 3)
    print(arr)
    print('resize 后数组:\n', np.resize(arr, (3, 4)))

    # 输出:
    # [[0 1 2 3]
    #  [4 5 0 1]
    #  [2 3 4 5]]

2.2 append

函数名称 参数 说明
append(arr, values, axis=None) arr:输入的数组 values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反 在数组的末尾添加值,返回一个一维数组
python 复制代码
# np.append(array, values, axis)
def arr_append1():
    arr = np.arange(6).reshape(2, 3)
    print(arr)
    arr1 = np.append(arr, [[1, 2, 3], [1, 2, 4]], axis=0)
    print(arr1)


def arr_append2():
    arr = np.arange(6).reshape(2, 3)
    print(arr)
    arr1 = np.append(arr, [[1, 2, 3], [1, 2, 4]], axis=1)
    print(arr1)

2.3 insert

函数名称 参数 说明
insert(arr, obj, values, axis) arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 values:要插入的值 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反 沿规定的轴将元素值插入到指定的元素前
python 复制代码
def arr_insert():
    arr1 = np.arange(1, 7).reshape(2, 3)
    arr2 = np.arange(7, 13).reshape(2, 3)
    arr12 = np.insert(arr1, 2, [4, 5], axis=1)
    arr21 = np.insert(arr2, 2, [4, 5, 9], axis=0)
    print(arr12)
    print(arr21)

2.4 delete

函数名称 参数 说明
delete(arr, obj, axis) arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 axis:默认为 None,返回的是一维数组;当 axis =0 时,删除指定的行,若 axis=1 则与其恰好相反 删掉某个轴上的子数组,并返回删除后的新数组
python 复制代码
def arr_delete():
    arr = np.arange(6).reshape(2, 3)
    print(arr)
    arr1 = np.delete(arr, [1, 2], axis=1)
    print(arr1)

2.5 argwhere

返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标

2.6 unique

函数名称 参数 说明
unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None) ar:输入的数组 return_index:如果为 True,则返回新数组元素在原数组中的位置(索引) return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引) return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数 删掉某个轴上的子数组,并返回删除后的新数组

1:返回唯一元素的索引

2:返回唯一元素及其逆索引

3:返回唯一元素的计数

3.统计函数

3.1 amin() 和 amax()

  • 计算数组沿指定轴的最小值与最大值,并以数组形式返回

  • 对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向

  • 按1轴求最小值,表示在最内层轴中(每列中)分别找最小值;按0轴求最小值表示在最外层轴中(所有行中按列)找最小值。求最大值类似

3.2 ptp()

  • 计算数组元素中最值之差值,即最大值 - 最小值

  • 对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向

3.3 median()

用于计算中位数,中位数是指将数组中的数据按从小到大的顺序排列后,位于中间位置的值。如果数组的长度是偶数,则中位数是中间两个数的平均值。

3.4 mean()

沿指定的轴,计算数组中元素的算术平均值(即元素之总和除以元素数量)

3.5 average()

加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。

其中 xi是数组中的元素,wi是对应的权重。

如果所有元素的权重之和等于1,则表示为数学中的期望值。

3.6 var()

在 NumPy 中,计算方差时使用的是统计学中的方差公式,而不是概率论中的方差公式,主要是因为 NumPy 的设计目标是处理实际数据集,而不是概率分布。

np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。

总体方差:

对于一个总体数据集 X={x1,x2,...,xN},总体方差的计算公式为:

其中:

  • N是总体数据点的总数。

  • μ是总体的均值

样本方差:

对于一个样本数据集 X={x1,x2,...,xn},样本方差 的计算公式为:

其中:

  • n是样本数据点的总数。

  • xˉ是样本的均值。

在样本数据中,样本均值的估计会引入一定的偏差。通过使用 n−1n−1 作为分母,可以校正这种偏差,得到更准确的总体方差估计

3.7 std()

标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值

python 复制代码
import numpy as np


def arr_min():
    arr = np.array([[9, 2, 3], [2, 5, 8], [6, 7, 8]])
    print(arr)
    print(np.min(arr, axis=0))  # 按垂直方向取最小的
    print(np.min(arr, axis=1))  # 按水平方向取最小的


def arr_ptp():
    arr = np.array([[9, 2, 3], [2, 5, 8], [6, 7, 8]])
    print(arr)
    print(np.ptp(arr, axis=0))  # 按垂直方向取最大值和最小值的差
    print(np.ptp(arr, axis=1))  # 按水平方向取最大值和最小值的差


def arr_median():
    arr = np.array([[9, 2, 3, 6], [2, 5, 8, 9], [6, 7, 8, 9]])
    print(arr)
    print(np.median(arr, axis=0))  # 按垂直方向取中位数
    print(np.median(arr, axis=1))  # 按水平方向取中位数


def arr_mean():
    arr = np.array([[9, 2, 3], [2, 5, 8], [6, 7, 8]])
    print(arr)
    print(np.mean(arr, axis=0))  # 按垂直方向取算术平均值(即元素之总和除以元素数量)
    print(np.mean(arr, axis=1))  # 按水平方向取算术平均值(即元素之总和除以元素数量)


def arr_average():
    # 创建一个一维数组
    arr = np.array([1, 2, 3, 4, 5])
    # 创建权重数组
    weights01 = np.array([0.1, 0.2, 0.3, 0.2, 0.2])
    # 使用 np.average 计算加权平均值
    average_value = np.average(arr, weights=weights01)
    print(average_value)


if __name__ == '__main__':
    arr_min()
    arr_ptp
    arr_median()
    arr_mean()
    arr_average()
相关推荐
太子釢几秒前
手写一个 RAG:从零搭建可溯源的检索增强问答系统
人工智能
不吃辣4907 分钟前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
文人sec10 分钟前
从接口压测到全链路质量保障:AI智能客服系统的软件测试实践
人工智能
声讯电子11 分钟前
实测A-59F音频模组:降噪稳、不啸叫、通话清晰
人工智能·语音识别·ai降噪·usb接口·回音消除
神奇霸王龙15 分钟前
2026旗舰六阶段MCP流水线实战指南
人工智能·ai·ai作画·prompt·aigc·mcp
山河不见老18 分钟前
【Cursor 、Qoder安装问题】Cursor 、Qoder安装卡在“正在准备安装”问题排查及解决
人工智能·windows·编辑器
新知图书18 分钟前
2.3 开发工作流
人工智能·agent·ai agent·智能体
tuanxiang20 分钟前
用免费 AI 改写工具处理批量文案的踩坑记录,附完整降噪脚本
人工智能
小邓的技术笔记21 分钟前
DeepSeek 大模型落地应用与场景实战指南
大数据·人工智能
石榴27 分钟前
从 Codex + Obsidian 到本地 RAG:我的私人知识库实践
人工智能