Numpy基础

前言

本文详细涵盖了numpy基础的各个方面,包括ndarray常见属性介绍、常见的ndarray的创建方法、ndarray的各种索引、迭代、切片等操作和Numpy的一些常用的内置函数介绍。内容详细,基础,欢迎大家阅读,如若发现问题或有建议,劳烦提醒博主。

正文

ndarray的常见属性

- shape

返回一个元组,表示ndarray各维度的长度。

- ndim

ndarray对象的维度。

- size

ndarray中元素的个数,相当于各维度长度的乘积。

- dtype

ndarray中存储的元素的数据类型。

- itemsize

ndarray中每个元素的字节数。

具体使用如下:
在这里插入图片描述

常见的创建array对象的方法

1. np.array(obj, dtype = )

将输入的py对象和ndarray对象转为ndarray对象,并返回一个新的ndarray对象。其中数据类型dtype是可以自己指定的,如果不指定,py会自己默认识别出来的。

  • 指定类型:

float

# 一维数组转化为array,并返回一个新的array对象由arr接收
arr = np.array(my_lst, dtype='float')
print(arr)
arr.dtype

在这里插入图片描述

int32

arr = np.array(my_lst, dtype='int32')
print(arr)
arr.dtype

在这里插入图片描述

int64

arr = np.array(my_lst, dtype='int64')
print(arr)
arr.dtype

在这里插入图片描述

  • 不指定类型
    py自动识别传入的dtype为int32
arr = np.array(my_lst)
print(arr)
arr.dtype

在这里插入图片描述
多维转化为ndarray,其实大同小异

# 多维数组转化为array,以二维举例
my_mat = [[1,2,3],[4,5,6],[7,8,9]]
np.array(my_mat)

在这里插入图片描述

py对象——元组也可以转化为ndarray

# 元组转化为array
my_tuple = np.array((1,2))
np.array(my_tuple)

在这里插入图片描述

只要传入对象在维度和长度上是统一的,也可以混合传入

# 混合py类型传入,
my_lst = [1,2,3]
my_tuple = (1, 2, 3)
# 注意这里外面要加一个中括号,不然会报错
# 注意这里传入对象的维度(shape)都是统一的,如果不统一也会报警告。
np.array([my_tuple, my_lst])

在这里插入图片描述
补充:

  • np.asarray(): 将输入的py对象转换为ndarray对象,并返回一个新的ndarray对象。但当输入的对象是ndarray时,不会生成新的ndarray对象,新变量指向的依然是原来输入的ndarray对象。
    在这里插入图片描述

2. 一些常用的内置函数

  • np.ones()
# 生成3行4列的全1矩阵
# 若传入参数是一个值而非元组,则生成长度为传入参数的全1的一维数组
np.ones((3,4))

在这里插入图片描述

  • np.zeros()
# 生成5行5列的零矩阵
# 若传入参数是一个值而非元组,则生成长度为传入参数的全0的一维数组
np.zeros((5,5))

在这里插入图片描述

  • np.eye()或者np.identity()
# 生成5维的对角矩阵
np.eye(5)

细心看上面所有的输出格式我们不难发现,py默认生成的dtype是float类型的数据。如果查文档可以发现,其默认都是float64类型。
所以如果有填空题让你写np内置函数在不指定dtype下的输出结果,不要忘记是浮点数!
在这里插入图片描述在这里插入图片描述

  • np.empty(shape, dtype=float, order=‘C’)
    生成一个指定维度和数据类型的未初始化的随机数数组:
    在这里插入图片描述
    如果我们想要创建空数组,我们需要指定dtype是一个对象(后续要求用户手动设置数组中的所有值):
    在这里插入图片描述
    我们可以进行手动赋值:
    在这里插入图片描述

3. np.arange(start, end, step)

值的范围是[start, end)
浅浅举几个例子:

# 生成0到9的一维数组
# 若不指定步长则默认为1
np.arange(0,10)

在这里插入图片描述

# 生成0到10且步长为2的一维数组
np.arange(0,11,2)

在这里插入图片描述

4. np.linspace(start, end, num)

细心的小伙伴是可以发现,linspace的end是包含在内的,和arange不同。
值的范围是[start, end]

# 在0到5之前均匀地取10个点
np.linspace(0,5,10)

在这里插入图片描述

5. np.random的一些内置函数

  • np.random.rand(shape)
# 返回5个服从0~1均匀分布的随机样本值,随机样本取值范围是 [0,1)
np.random.rand(5)

在这里插入图片描述

# 返回5行5列服从0~1均匀分布的随机样本值,随机样本取值范围是 [0,1)
np.random.rand(5,5)

在这里插入图片描述

  • np.random.randn()
# 返回2个服从具有标准正态分布的随机值
np.random.randn(2)
# 返回4行4列服从具有标准正态分布的随机值
np.random.randn(4,4)

在这里插入图片描述

  • np.random.randint(start, end, num)
    值的范围是[start, end)
# 从1,100之前不包括100返回1个随机整数
np.random.randint(1,100)
# 从1,100之前不包括100,返回10个随机整数
np.random.randint(1,100,10)

在这里插入图片描述


ndarray的索引、迭代和切片

索引可以是数值、数值的list、切片或者是布尔类型的list,可以通过索引获得ndarray的一个切片。
Python列表的索引和切片操作在ndarray上仍然适用。
但是要注意ndarray的切片返回的是数组的视图,而非副本,也就是说对切片的修改即是对原始的ndarray的修改。如果你想要获得副本,这需要调用copy()方法。

1. 一维

一维ndarray的索引、切片和迭代类似于py对象的list操作
首先先定义一个arr
在这里插入图片描述

  • 索引是数值
    在这里插入图片描述
  • 索引是数值的list,返回arr对应下标的值
    在这里插入图片描述
  • 索引是切片
    切片格式 list[start : end : step],step为-1则表示反向切片
    取值范围[start,end)
    在这里插入图片描述
  • 索引是布尔类型的list
    在这里插入图片描述
    把该布尔数组作为索引则会返回对应值
    在这里插入图片描述

2. 多维

将一维ndarray利用reshape()转变为三维,其维度对应的长度分别为3,2,2
在这里插入图片描述

多维ndarray可以在每一个维度有一个索引,具体可以看实例

  • 选取单个索引
    在这里插入图片描述
  • 如果需要降维,则可以适当省略后面的索引
    在这里插入图片描述
  • 如果一些维度需要用切片,一些维度不需要,那么索引也可以这么选取
    在这里插入图片描述
  • 如果此时用bool类型的list则会展平变成一维
    在这里插入图片描述

3. 迭代

  • 一维数组的迭代是和py的list对象相同的
  • 多维数组的迭代是针对第一个维度进行迭代的
    在这里插入图片描述
    如果想要对每个元素进行迭代,则可以通过flat属性:
    在这里插入图片描述

ndarray的shape操作

ndarray的shape是可以通过命令来改变的:

  • reshape:将ndarray的shape按照传入的参数进行修改,返回一个新的ndarray对象
    如:
arr = np.random.randint(0,101,10).reshape(10,10)

在这里插入图片描述

  • reval:将多维改为一维,返回一个一维的ndarray
  • T:返回原ndarray的转置
  • resize:将ndarray的shape按照传入的参数修改
函数名是否修改原ndarray对象
reshape
reval
T
resize

ndarray的一些基础操作及广播机制

对于一些用于标量的算术运算,Numpy可以通过广播的方式将其作用到ndarray的每个元素上,返回一个或者多个新的矢量。

  • 如进行操作arr+1,是将arr的每个元素都加1:
    在这里插入图片描述
  • 如果是arr1 + arr2,那是对应位置元素相加:在这里插入图片描述
    同理有:

在这里插入图片描述

  • 一些内置函数也是在元素级别上进行的
    可以看到np.multiply()和arr1*arr2效果一样,都是对应元素相乘
    在这里插入图片描述
    如果想要实现矩阵相乘,则可以使用np.dot()
    在这里插入图片描述

Numpy的一些常用内置函数

- np.max()、np.min()

功能:返回arr中的最大值、最小值
在这里插入图片描述
补充:
如果想要获得最大值或最小值的索引,可以使用argmax()或argmin()。
在这里插入图片描述

- np.mean()

语法: numpy.mean(arr, axis=None, dtype=float64)
含义:用来计算给定数组沿指定轴的平均数,其中axis表示计算平均数的轴,dtype默认为float64。

  • 一维
    在这里插入图片描述
  • 多维,可以指定轴
    默认axis=None,即不指定轴,计算范围为全部元素。
    若arr为多维,则axis=0表示最外层[],axis=1表示第二层[]…后面的都以此类推。其中最外层[],第二层[]…这些用索引表示的话可以认为是代表arr[][]…[][]中对应的维度。
    则对于下面的二维arr,axis=0代表第一层[],即第一层[]对应的维度的索引改变,其他维度在同组内不变。

    arr[0][0],arr[1][0],arr[2][0]为一组;(147)
    arr[0][1],arr[1][1],arr[2][1]为一组;(258)
    arr[0][2],arr[1][2],arr[2][2]为一组;(369)
    因为axis=0下求得的答案是[4., 5., 6.];
    对于axis=1代表第二层[],即第二层[]对应的维度的索引改变,其他维度在同组内不变。

    arr[0][0],arr[0][1],arr[0][2]为一组;(1,2,3)
    arr[1][0],arr[1][1],arr[1][2]为一组;(4,5,6)
    arr[2][0],arr[2][1],arr[2][2]为一组;(7,8,9)
    123,456,789分别为一组,求得的答案为[2., 5., 8.];
    在这里插入图片描述

- np.median

语法:numpy.median(arr, axis=None, dtype=float64)
含义:用来计算给定数组沿指定轴的中位数,其中axis表示计算中位数的轴,dtype默认为float64。
同理,我们也可以求得不指定维度下(即所有元素的中位数)、axis=0时的中位数和axis=1下的中位数。
在这里插入图片描述

- np.std()

语法:np.std(arr, axis=None)
含义:计算沿指定轴的标准差。
同理,在不指定axis下,求得的是全部元素的标准差。
同样,指定确切的axis我们也可以求得对应axis的标准差。
在这里插入图片描述

- np.sum()

语法:np.sum(arr, axis=None)
含义:计算沿指定轴的和。
同理,在不指定axis下,求得的是全部元素的和。
同样,指定确切的axis我们也可以求得对应axis的和。在这里插入图片描述

- np.cumsum()

语法:np.sum(arr, axis=None)
含义:返回给定轴上元素的累积和。
这个和上面的np.sum()有些不同。
当不指定axis时,其返回的是经过展平的一维ndarray,每处的结果相当于是用了一个循环将前面的值进行累加。也就是先将新的ndarray[0]设为arr[0],余下的便令循环变量为i,新的ndarray[i+1]中存放的是arr[i + 1] = arr[0] + … + arr[i - 1],其中i >= 0。
当指定axis时,就不会进行展平了,返回的仍是同维度的答案。
如axis=0,(1,4,7),(2,5,8),(3,6,9)分别成组进行累加,答案为(1,5,12),(2,7,15),(3,9,18)。
axis=1自然也是同理。
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。它的使用可以使代码更简洁,并且具有一些特性,如向量化操作,可以加速计算过程。在NumPy中,最重要的数据结构是NumPy数组,它可以通过不同的方法进行创建。 创建一维NumPy数组的常见方法有以下几种: 1. 使用np.array()函数,传入一个列表作为参数,例如: my_array = np.array([1, 2, 3, 4, 5]) 2. 使用np.array()函数,传入一个元组作为参数,例如: my_array2 = np.array((0, 1, 2, 3, 4)) 3. 使用np.arange()函数,该函数类似于内置函数range(),返回一个数组而不是列表,例如: my_array3 = np.arange(5) 4. 使用np.linspace()函数,该函数返回一个包含指定数量元素的数组,而不是指定步长(step),例如: my_array4 = np.linspace(0, 2*np.pi, 5) 这些方法可以用来创建不同类型的一维NumPy数组。通过打印数组可以查看创建的结果。在使用NumPy之前,需要导入NumPy库,可以使用import numpy as np语句进行导入。 NumPy还可以用于执行各种数学任务,如数值积分、微分、内插、外推等,以及快速处理图像等。因此,在机器学习中,NumPy常被用于存储训练数据和机器学习模型的参数,以及进行简单和快速的计算。 总结起来,NumPy提供了丰富的功能和优秀的库函数,使得在Python中进行数值计算变得更加方便和高效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python科学计算的基本包-Python科学计算基本包Numpy使用的教程.pdf](https://download.csdn.net/download/qq_43934844/87898289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [numpy基础语法整理](https://blog.csdn.net/weixin_61890283/article/details/124596265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值