Python之numpy:数组定义&ndarray操作

本文详细介绍了NumPy库中的核心概念,包括ndarray的构建、类型转换、常用数组函数如arange、linspace、zeros和eye,以及随机数组生成。此外,还涵盖了ndarray的基本操作,如形状、索引、切片、数组变形、拼接和数组分割的方法。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、numpy

numpy是Python的科学计算包,包含了多维数组及多维数组的操作
numpy与Python原生array区别:

  • numpy数组在创建时有固定大小,更改ndarray的大小将创建一个新的数组并删除原始数据,不同于Python列表(可以动态增长)
  • numpy数组中的元素都需要具有相同的数据类型
  • 数组的元素也是数组(可以是Python的原生array,也可以是ndarray)的情况下,构成了多维数组
  • numpy数组操作比使用Python内置的序列可能更有效和更少的代码行

1、构建ndarray

在这里插入图片描述
之所以出现warning,是因为数组c中列表长度不一致,如图所示
在这里插入图片描述
创建ndarray时,也可指定类型,如下图:
在这里插入图片描述

2、类型转换

在这里插入图片描述

3、常用数组

1)、np.arange()

用来创建一个线性序列数组,在给定间隔内返回均匀间隔的值,格式:
arange([start,]stop[,step],dtype=None)
在这里插入图片描述

2)、np.linspace()

np.linspace(start,stop,num=50,endpoint=True)

  • 在指定的间隔内返回均匀间隔的数字,用作相同间隔采样
  • start:标量,序列起始值
  • stop:标量,除非endpoint设置为false,否则为序列的结束值
  • num:int,可选。要生成的样本数,默认值为50,必须为非负数
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/75bd23499f4345e8b474fb6e68c6b6aa.png

3)、np.zeros()

定义一个为0的数组,与之相对应的是np.ones()
在这里插入图片描述

4)、np.eye()

返回一个二维数组,其对角线为1
在这里插入图片描述

5)、np.full()

返回给定性质和类型的数组,填充fill_value
np.full(shape,full_value,dtype)

  • shape:int或int的序列新数组的性质
  • full_value:标量填充值
  • dtype:数据类型,可选数组所需的数据类型默认值为‘None’
    在这里插入图片描述

4、随机数组

1)、np.random.randint()

将随机数从‘低’(包括)返回到“高”(不包括)
语法:randint(low,high=None,size=None,dtype)

  • 使用方法1:将随机整数从低返回到高,左闭右开
  • 使用方法2:返回特定形状的随机整数
    在这里插入图片描述

2)、np.random.random()

  • 语法:np.random.random(size=None)
  • 返回随机浮点数,在半开区间(0.0,1.0)中
    在这里插入图片描述

3)、np.random.randn()

  • 语法:np.random.randn(形状)
  • 从标准正态分布中返回一个样本
    在这里插入图片描述

4)、np.random.normal()

  • 语法:np.random.normal(平均值,标准差,形状)
  • 作用:从正态分布中随机抽取样本
  • 如果平均值和标准差为0和1,或者不写这2个参数,就等同于np.random.randn()
    在这里插入图片描述

5)、np.random.choice()

从给定的1-D阵列生成随机样本

  • choice(a,size=None,replace,p=None)
  • a:1-D数组或int
    如果是ndarray,则从其元素生成随机样本
    如果是int,则生成随机样本,就像a是np.arrange(a)
  • size:int或int的元组,可选
    输出形状,如果给定的形状是例如(m,n,k),那么绘制了mnk样本,默认值为None,在这种情况下返回单个值
  • p:1-D数组,可选与a中每个条目相关的概率。如果没有给出样品则假定均匀分布一个条目
    在这里插入图片描述

6)、np.random.shuffle()

  • 通过混洗其内容来就地修改序列,此功能仅沿着a的第一轴洗牌
  • np.random.shuffle(x),x:array_like(要洗牌的数组或列表)
    在这里插入图片描述

二、ndarray操作

1、ndarray常用属性

1)、np.random.seed()

np.random.seed(Num)可以设置一组种子值,确保每次程序执行时都能生成同样的随机数组
第一次执行:
在这里插入图片描述
第二次执行
在这里插入图片描述
设置随机种子后,第一次执行:
在这里插入图片描述
第二次执行:
在这里插入图片描述
从结果不难看出,设置随机种子后,不管执行几次,生成的随机数组结果都一样。

2)、ndarray.shape

ndarray.shape()查看数组信息
在这里插入图片描述

3)、ndarray.ndim

ndarray.ndim()查看数组维度
在这里插入图片描述

4)、ndarray.size

ndarray.size查看数组元素个数
在这里插入图片描述

2、数组索引、切片

1)、一维数组

在这里插入图片描述

2)、二维数组

在这里插入图片描述

2)、修改数组元素值

在这里插入图片描述

3、数组变形

1)、ndarray.reshape()

ndarray.reshape()可以进行数据转换,比如从一维数组转换为三维数组,但是reshape不改变原数据,而是返回修改后的数组
在这里插入图片描述
小技巧:当其中一个维度不知道时,可以使用-1代替,程序会自动计算,但-1只能出现一次,否则报错
在这里插入图片描述

2)、ndarray.shape

  • 查看数组形状
  • 修改数组形状,与reshape不同,shape之间改变原数组
    在这里插入图片描述

3)、ndarray.resize()

与shape相同改变原数组

在这里插入图片描述

4)、ndarray.ravel()

  • 数组的平铺
  • 不管多少维,返回全部铺开变成一维数组,但不改变原数组
    在这里插入图片描述

4)、ndarray.T

  • 和数学意义上的转置相同
  • 不改变原数组

在这里插入图片描述

4、数组拼接

1)、np.concatenate()

np.concatenate((a1,a2,),axis=0,out=None)沿着现有轴加入一系列数据

  • a1,a2,…:array_like的序列
    除尺寸外,阵列必须具有相同形状

  • axis:int,可选,数组为一维时,只能横向合并,为二维及多维时,axis=0为横向合并,axis为1时为纵向合并
    数组连接的轴,如果axis为none,数组在使用前是扁平的,默认值为0
    在这里插入图片描述
    多维数组时,拼接思路如下:
    在这里插入图片描述
    维度不同的数组合并时,会报错:
    在这里插入图片描述
    在这里插入图片描述
    备注:
    222:每个三维数组有2个二维数组,每个二维数组有两个一维数组,每个一维数组有两个元素
    422:每个三维数组有4个二维数组,每个二维数组有两个一维数组,每个一维数组有两个元素
    242:每个三维数组有2个二维数组,每个二维数组有四个一维数组,每个一维数组有两个元素

  • 一维数组:如果有一个操作需要设置轴,一维数组只有一个轴,为轴0
    axis=0:基本操作单位为一维数组里的一个个元素

  • 二维数组:如果有一个操作需要设置轴,二维数组有两个轴,为轴0、轴1
    axis=0:基本操作单位为二维数组里的一个个一维数组
    axis=1:基本操作单位为一维数组里的一个个元素

  • 三维数组:如果有一个操作需要设置轴,三维数组有三个轴,为轴0、轴1、轴2
    axis=0:基本操作单位为三维数组里的一个二维数组
    axis=1:基本操作单位为二维数组里的一个个一维数组
    axis=2:基本操作单位为一维数组里的一个个元素

2)、np.vstack()

  • 垂直堆叠数组
  • np.vstack(tup)
    tup:ndarrays的序列
    除了第一个轴外,阵列必须具有相同形状
    在这里插入图片描述

3)、np.hstack()

水平直堆叠数组
在这里插入图片描述

5、数组分割

  • 讲一个数组分成几个较小的数组
  • 既然有多个数组堆叠,也相应有一个数组拆分成几个小数组
  • 和拼接有以下对应关系
    split ——>concatenate
    hsplit ——>hstack
    vsplit ——>vstack

1)、np.split()

语法:np.split(array,indices_or_sections,axis=0)
作用:将数组拆分为多个子数组,不改变原数组
axis:int,可选。要拆分的轴,默认为0
在这里插入图片描述

2)、np.vplit()

语法:np.vplit(any,indices_or_sections)
作用:将数组垂直拆分为多个数组(按行)
相当于np.split中axis=0
在这里插入图片描述

3)、np.hplit()

在这里插入图片描述

头歌平台Python数组定义操作第1关可能涉及不同的具体题目要求,但从提供的引用来看,可能会涉及数组的创建、分割等操作。 ### 数组创建 使用`numpy`库创建数组是常见的操作,如引用[1]中使用`np.arange(9)`创建了一个包含 0 到 8 的一维数组: ```python import numpy as np a = np.arange(9) print('第一个数组:') print(a) ``` ### 数组分割 可以使用`np.split()`函数对数组进行分割。此函数可以将数组分为大小相等的子数组,也能按照指定的位置进行分割。 - **分为大小相等的子数组**: ```python b = np.split(a, 3) print('将数组分为三个大小相等的子数组:') print(b) ``` - **按指定位置分割**: ```python b = np.split(a, [4, 7]) print('将数组在一维数组中表明的位置分割:') print(b) ``` ### 数组元素相加 若题目涉及数组元素相加,可参考引用[3],将输入的列表转换为`numpy`数组后进行相加操作: ```python import numpy as np def student(a, b, c): result = [] a = np.array(a) b = np.array(b) c = np.array(c) result = a + b + c return result ``` ### 检查特定条件 如果题目要求检查数组是否符合特定条件,如引用[2]中检查数组是否为“欢乐的跳”,可通过计算元素间差值的绝对值,并检查这些差值是否包含从 1 到`n - 1`的所有整数来判断: ```python def is_happy_jump(n, arr): if n < 2: return "no" diffs = set() for i in range(1, n): diffs.add(abs(arr[i] - arr[i - 1])) for i in range(1, n): if i not in diffs: return "no" return "happy" ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值