当前位置: 首页 > news >正文

Numpy基础02

目录

1.数组操作

1.1改变维度

1.2遍历数组

1.2.1nditer(array,order)

1.2.1.1flags 参数

1.2.1.2op_flags 参数

1.3平展数组

1.3.1flatten(order='C')

1.3.2ravel()

1.4数组转置

1.4.1transpose()

1.4.2T

1.5分割数组

1.5.1hsplit(arr,indices_or_section)

1.5.2vsplit(arr,indices_or_section))

1.6连接数组

1.6.1hstack()

1.6.2vstack()

1.7删除维度

1.8增加维度

2.数组元素的增删改查

2.1resize(arr, new_shape)

2.2append(arr, values, axis=None)

2.3insert(arr, obj, values, axis)

2.4delete(arr, obj, axis)

2.5argwhere(arr)

2.6unique

3.统计函数

3.1amin(arr,axis=None)和amax(arr,axis=None)

3.2ptp(arr,axis=None)

3.3median(arr,axis=None)

3.4mean(arr,axis=None)

3.5average(arr,weights,axis=None)

3.6var(arr,ddof=0,axis=None)

3.6.1var(arr,axis=None)

3.6.2var(arr,ddof=1,axis=None)

3.7std(arr,axis=None,ddof=0)


1.数组操作

1.1改变维度

reshape()

1.2遍历数组

flat:数组属性,是迭代器,用于遍历所有元素。

arr = np.arange(0,10).reshape(2,5)
for i in arr.flat:print(i,end="  ")

1.2.1nditer(array,order)

nditer 是 NumPy 中的迭代器对象,用于高效地遍历多维数组。

arr = np.array([[1, 2, 3], [4, 5, 6]])for item in np.nditer(arr,order="F"):print(item)
print("-----")
for item in np.nditer(arr,order="C"):print(item)
1.2.1.1flags 参数

用于指定迭代器的额外行为。

multi_index:返回每个元素的索引

external__loop:返回一维数组,减少函数调用的次数。

arr = np.array([[1, 2, 3], [4, 5, 6]])
item = np.nditer(arr,flags=['multi_index'])
for i in item:print(i,item.multi_index)# print(f"Element: {i}, Index: {i.multi_index}")item2 = np.nditer(arr,flags=['external_loop'],order="F")
for i in item2:print(i)item3 = np.nditer(arr,flags=['external_loop'],order="C")
for i in item3:print(i)

注意:flags的参数是列表或元组

1.2.1.2op_flags 参数

用于指定操作数

  • readonly:只读操作数
  • readwrite:读写操作数
  • writeonly:只写操作数
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in np.nditer(arr, op_flags=['readwrite']):x[...] = 2 * x
print(arr)

1.3平展数组

1.3.1flatten(order='C')

数组属性,返回数组以一维形式的副本

参数

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

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

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

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

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

arr = np.arange(0,10).reshape(2,5)
print(arr.flatten(order="F"))
print(arr.flatten(order="C"))

1.3.2ravel()

返回原数组的一个视图(view)(浅拷贝)

arr = np.arange(0,6).reshape(2,3)
x=arr.ravel()
x[-1]=100
print(arr)

1.4数组转置

1.4.1transpose()

arr = np.arange(0,6).reshape(2,3)
print(arr.transpose())

1.4.2T

数组属性

arr = np.arange(0,6).reshape(2,3)
print(arr.transpose())

1.5分割数组

1.5.1hsplit(arr,indices_or_section)

列分割

arr = np.arange(0,9).reshape(3,3)
print(arr)
print('列分割1:',np.hsplit(arr,[1,2]))
print('列分割2:',np.hsplit(arr,[2]))

1.5.2vsplit(arr,indices_or_section))

行分割

arr = np.arange(0,9).reshape(3,3)
print(arr)
print('行分割1:',np.vsplit(arr,[1,2]))
print('行分割2:',np.vsplit(arr,[2]))

1.6连接数组

1.6.1hstack()

元组,列表,或者numpy数组,返回numpy的数组

按水平顺序堆叠序列中数组(列方向)

注意:参与连接的数组,行数一致

arr = np.arange(0, 6).reshape(2,3)
arr2 = np.arange(6.1, 10.1).reshape(2,2)
print(np.hstack((arr,arr2)))lt1=[1,2,3]
lt2=[4,5,6]
print(np.hstack((lt1,lt2)))arr2=np.arange(8, 10).reshape(1,2)
arr3 = np.arange(0, 6).reshape(1,6)
tup_arr2=tuple(arr2)
tup_arr3=tuple(arr3)
print(np.hstack((tup_arr2,tup_arr3)))

1.6.2vstack()

元组,列表,或者numpy数组,返回numpy的数组

按垂直方向堆叠序列中数组(行方向)

注意:参与连接的数组,列数一致

arr = np.arange(0, 6).reshape(3,2)
arr2 = np.arange(6.1, 10.1).reshape(2,2)
print(np.vstack((arr,arr2)))

1.7删除维度

squeez(arr,axis)

删除的指定维度的维度值必须为1

arr = np.arange(0,20).reshape(4,5,1)
print('原数组:\n', arr)
arr1 = np.squeeze(arr,axis=2)
print('删除后:\n',arr1)

1.8增加维度

expand_dims(arr, axis)

axis:新轴插入的位置

arr = np.arange(0, 6).reshape(2,3)
print(arr)
print(np.expand_dims(arr,axis=0))

2.数组元素的增删改查

2.1resize(arr, new_shape)

返回的修改后的数组

new_shape:在二维数组中,[cow,col],元素数量:cow*col

若元素数量不够,重复数组元素来填充新的形状

若元素数量超出范围,截断范围外数组元素

arr = np.arange(0,9).reshape(3,3)
print('',np.resize(arr,[3,4]))
print(np.resize(arr,[2,2]))

2.2append(arr, values, axis=None)

values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致(局限)

axis:默认为 None,返回的是一维数组;

当 axis =0 时,追加的值会被添加到行,而列数保持不变,axis=1 与其相反

arr = np.arange(0,6).reshape(2,3)
value1=np.array([10])
value2=np.array([[10,11,12],[13,14,15]])
value3=np.array([100,110,120])
print("axis=None时",np.append(arr,value1),sep="\n")
print("axis=0时",np.append(arr,value2,axis=0),sep="\n")
print("axis=1时",np.append(arr,value2,axis=1),sep="\n")

2.3insert(arr, obj, values, axis)

obj:表示索引值,在该索引值之前插入 values 值;

value:插入的元素,可广播

axis:默认为 None,返回的是一维数组;

当 axis =0 时,追加的值会被添加到行,而列数保持不变,axis=1 与其相反

arr = np.arange(0,6).reshape(2,3)
value1=np.array([10,11,12])
value2=np.array([20,21])
value3=np.array([20])
print(np.insert(arr,1,value1,axis=0))
print(np.insert(arr,2,value2,axis=1))
print(np.insert(arr,2,value3,axis=1))

2.4delete(arr, obj, axis)

obj:表示索引值,在该索引值之前删除 values 值

axis:默认为 None,返回的是一维数组;

当 axis =0 时,删除指定的行,若 axis=1,删除指定的列

arr = np.arange(0,12).reshape(3,4)
print("原二维数组:",arr,sep="\n")
print("删除行:",np.delete(arr,[2],axis=0),sep="\n")
print("删除列:",np.delete(arr,[1],axis=1),sep="\n")

2.5argwhere(arr)

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

arr=np.array([[1,2,3],[0,4,5]])
print(np.argwhere(arr))

2.6unique

unique(arr, return_index=False, return_inverse=False, return_counts=False, axis=None)

return_index:如果为 True,则返回新数组元素在原数组中的位置(索引)

return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引

return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数

功能:删掉某个轴上的子数组,并返回删除后的新数组

用途:词频统计

arr = np.array([[1, 2], [2, 3], [1, 2]])
arr_new, index, inverse, count = np.unique(arr, return_index=True, return_inverse=True, return_counts=True)
print("去重后:", arr_new, sep="\n")
print("出现次数统计:", count, sep="\n")
print("新数组元素在原数组的首次出现的索引:", index, sep="\n")
print("原数组此位置元素在新数组中的索引:", inverse, sep="\n")

3.统计函数

3.1amin(arr,axis=None)和amax(arr,axis=None)

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

对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向,axis默认值为None,amin,amax求整体的最值

arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print('数组中最小值\n',np.amin(arr))
print('列最小值\n',np.amin(arr,axis=0))
print('行最小值\n',np.amin(arr,axis=1))
print('数组中最大值\n',np.amax(arr))
print('列最大值\n',np.amax(arr,axis=0))
print('行最大值\n',np.amax(arr,axis=1))

3.2ptp(arr,axis=None)

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

对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向,axis默认值为None,求整体的差值

arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.ptp(arr))
print(np.ptp(arr,axis=0))
print(np.ptp(arr,axis=1))

3.3median(arr,axis=None)

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

arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.median(arr))
print(np.median(arr,axis=0))
print(np.median(arr,axis=1))

3.4mean(arr,axis=None)

沿指定的轴,求数组中元素的算术平均值

arr = np.array([[1, 2, 3], [0, 4, 5], [2, 5, 6], [4, 2, 4]])
print(arr)
print(np.mean(arr))
print(np.mean(arr,axis=0))
print(np.mean(arr,axis=1))

3.5average(arr,weights,axis=None)

加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。

arr = np.array([[1, 2], [3, 4],[5,6]])
weights = np.array([[0.4, 0.3], [0.2, 0.2],[0.8,0.57]])
print(np.average(arr, weights=weights))
print(np.average(arr, weights=weights,axis=0))
print(np.average(arr, weights=weights,axis=1))

3.6var(arr,ddof=0,axis=None)

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

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

总体方差:

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

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

  • μ是总体的均值。

3.6.1var(arr,axis=None)

arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.var(arr))
print(np.var(arr,axis=0))
print(np.var(arr,axis=1))

样本方差:

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

其中:

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

  • xˉ是样本的均值。

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

3.6.2var(arr,ddof=1,axis=None)

arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.var(arr,ddof=1))
print(np.var(arr,ddof=1,axis=0))
print(np.var(arr,ddof=1,axis=1))

3.7std(arr,axis=None,ddof=0)

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

arr = np.array([[1, 2], [3, 4],[5,6]])
print(np.std(arr))
print(np.std(arr,axis=0))
print(np.std(arr,axis=1))


http://www.mrgr.cn/news/56249.html

相关文章:

  • 计算机组成原理一句话
  • 【分布式微服务云原生】《微服务架构下的服务治理探秘》
  • 如何删除Maven
  • Java最全面试题->Java基础面试题->JavaSE面试题->异常面试题
  • uniapp,获取头部高度
  • Code Review Item
  • 浏览器控制的无线开关
  • 【03】RabbitMQ核心功能扩展
  • LeetCode718:最长重复子数组
  • [DB] NSM
  • 在线教育(培训+考试)/企业培训-企业培训平台-企业培训平台系统-企业内部培训系统-在线教育-Java语言开发
  • 「AIGC」n8n AI Agent开源的工作流自动化工具
  • php基础:数据类型、常量、字符串
  • 【内信互联】私有化安全性企业远程运维办公解决方案
  • Redis-04 Redis管道
  • 《黑神话:悟空》:又是这只跨界的猴子,诠释了传承与创新的关系
  • 【1】从零开始学习目标检测:YOLO算法详解
  • 1024程序员节:永无bug
  • 《远程桌面方案全析:开启高效远程协作新时代》
  • 美容师流失率高怎么办?怎样可以降低美容师的流失率?博弈美业门店收银系统管理系统分享
  • [LeetCode] 50. Pow(x, n)
  • 基于STM32的多功能MP3播放器
  • 数字信号处理实验简介
  • 流程引擎在企业管理中的关键作用
  • 双十一开启极速达夜派;黑神话获泰国年度最佳游戏;AI 模型可帮助识别 17000 多种疾病的候选药物....| 网易数智日报
  • 配置nginx服务通过ip访问多网站