一、Numpy入门

news2024/11/10 0:52:41

Numpy入门

  • 前言
  • 一、numpy简介
  • 二、Numpy的ndarray属性
    • 2.1. 直接用 .属性的方法实现
    • 2.2. 直接函数的方法实现
  • 三、Numpy的ndarray的创建
    • 3.1. ndarray介绍
    • 3.2. 数组形式
    • 3.3. zeros()、ones() 、 empty()
    • 3.4. arange(),类似 python 的 range() ,创建一个一维 ndarray 数组。
    • 3.5. matrix(),是 ndarray 的子类,只能生成 2 维的矩阵
    • 3.6. 创建随机数矩阵
    • 3.7. 等比数列 ( logspace )
    • 3.8. 等差数列 ( linspace )
  • 四、Numpy的内置函数
    • 4.1. 基本函数
    • 4.2. 统计函数
    • 4.3. 比较函数
    • 4.4. 去重函数
    • 4.5. 排序函数
  • 五、Numpy运算
    • 5.1. 加减、点乘、除法
    • 5.2. 矩阵相乘(外积)
  • 总结


前言

  • 学习机器学习之前,我们需要学习python中一些跟计算有关的库,例如numpy、pandas。接下里我们先了解numpy中的相关知识。

一、numpy简介

  • NumPy(Numerical Python)是Python数据分析必不可少的第三方库。
  • NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。
  • 主要功能:
    • 高性能科学计算和数据分析的基础包
    • ndarray,多维数组,具有矢量运算能力,快速、节省空间
    • 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
    • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具

二、Numpy的ndarray属性

2.1. 直接用 .属性的方法实现

shape(示例):

# 导包
import numpy as np
# 创建numpy的数组.   
# arange(15)       等价于python的 range(15), 即: 获取 0 ~ 14的整数
# reshape(3, 5)    把上述数据封装到 3个一维数组中, 每个一维数组的长度为: 5,  然后把三个一维数组封装成1个 二维数组.
arr = np.arange(15).reshape(3, 5)

print(f'数组的维度: {arr.shape}')         # (3, 5)

ndim(示例):

print(f'数组轴的个数: {arr.ndim}')        # 几维数组, 轴就是几,  2  

dtype(示例):

print(f'数组元素类型: {arr.dtype}')       # int64 

itemsize(示例):

print(f'数组每个元素的占用字节数: {arr.itemsize}')    # 8

size(示例):

print(f'数组元素个数: {arr.size}')        # 15

type(示例):

print(f'数组类型: {type(arr)}')           # <class 'numpy.ndarray'>

2.2. 直接函数的方法实现

代码如下(示例):

# 上述的 shape, ndim, size属性 可以 函数写法 实现.
# 格式: np.函数名(数组)
print(f'数组的维度: {np.shape(arr)}')         # (3, 5)   3个元素(一维数组), 每个元素(一维数组)又有5个元素(值)
print(f'数组轴的个数: {np.ndim(arr)}')        # 几维数组, 轴就是几,  2  
print(f'数组元素个数: {np.size(arr)}')        # 15 
print(f'数组类型: {type(arr)}')               # <class 'numpy.ndarray'>

三、Numpy的ndarray的创建

3.1. ndarray介绍

  • NumPy数组是一个多维的数组对象(矩阵),称为 ndarray(N-Dimensional Array)
  • 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点
  • 注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型。

3.2. 数组形式

代码如下(示例):

import numpy as np 
a = np.array([2, 3, 4])
print('数组a元素类型: ', a)      # [2, 3, 4]
print('数组a类型:', a.dtype)		# int64

b = np.array([1.2, 3.5, 5.1])
print('数组b类型:', b.dtype)     # float64

3.3. zeros()、ones() 、 empty()

函数zeros创建一个全是0的数组,
函数ones创建一个全1的数组,
函数empty创建一个内容随机并且依赖于内存状态的数组。默认创建的数组类型(dtype)都是float64

zero1 = np.zeros((3, 4))    # 3个一维数组, 每个长度为: 4
print('数组zero1: ', zero1)  #  数组zero1: [[0. 0. 0. 0.]
 							 # 			   [0. 0. 0. 0.]
 							 #             [0. 0. 0. 0.]]

ones1 = np.ones((2, 3, 4))  # 2个二维数组, 每个二维数组有3个一维数组, 每个一维数组有4个元素1, 整体放入1个数组中
print('数组one1: ', ones1)    # 数组one1:  [[[1. 1. 1. 1.]
                             #              [1. 1. 1. 1.]
                             #              [1. 1. 1. 1.]]

                             #              [[1. 1. 1. 1.]
                             #               [1. 1. 1. 1.]
                             #               [1. 1. 1. 1.]]]

empty1 = np.empty((2, 3))
print('数组empty1: ', empty1)  # 数组empty1:  [[6.23042070e-307 5.11798224e-307 1.37961370e-306]
 							  #			      [4.22795269e-307 9.34609790e-307 1.06101441e-312]]


print(zero1.dtype, ones1.dtype, empty1.dtype)  # float64  float64  float64

3.4. arange(),类似 python 的 range() ,创建一个一维 ndarray 数组。

代码如下(示例):

np_arange = np.arange(10, 20, 5,dtype=int)   # 起始, 结束, 步长, 类型

print("arange创建np_arange:", np_arange)     #  arange创建np_arange: [10 15]
print("arange创建np_arange的元素类型:", np_arange.dtype)  # arange创建np_arange的元素类型: int32
print("arange创建np_arange的类型:", type(np_arange))  # arange创建np_arange的类型: <class 'numpy.ndarray'>

3.5. matrix(),是 ndarray 的子类,只能生成 2 维的矩阵

代码如下(示例):

x1 = np.mat("1 2;3 4")
print(x1)    # [[1 2]
			 #	[3 4]]


x2 = np.matrix("1,2;3,4")
print(x2)       # [[1 2]
			    #  [3 4]]


x3 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print(x3)       # [[1 2 3 4]
                #  [5 6 7 8]]


3.6. 创建随机数矩阵

代码如下(示例):

import numpy as np

# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维), rand固定区间0.0 ~ 1.0
arr = np.random.rand(3, 4)
print(arr)        # [[0.09119117 0.6460204  0.50383065 0.67335935]
				  #  [0.19701768 0.15571364 0.59120424 0.77497329]
				  #  [0.22062685 0.2902945  0.38695936 0.81338176]]

print(type(arr))  # <class 'numpy.ndarray'>

# 生成指定维度大小(3行4列)的随机多维整型数据(二维), randint()可指定区间(-1, 5)
arr = np.random.randint(-1, 5, size=(3, 4))
print(arr)        # [[ 1  3  4  1]
 				  #  [ 0 -1  4  0]
                  #  [ 3  4  0  2]]
print(type(arr))  # <class 'numpy.ndarray'>

#生成指定维度大小(3行4列)的随机多维浮点型数据(二维), uniform()可以指定区间(-1, 5)产生-1到5之间均匀分布的样本值
arr = np.random.uniform(-1, 5, size=(3, 4))
print(arr)		  # [[ 1.13673297  1.48527364  3.24196413  0.86342194]
 				  #  [ 1.49173484  4.82213745  3.62326883 -0.20275583]
                  #  [ 3.6385359  -0.47568918  0.35379637  3.20684058]]
print(type(arr))  # <class 'numpy.ndarray'>


3.7. 等比数列 ( logspace )

代码如下(示例):

# np.logspace 等比数列, logspace中,开始点和结束点是10的幂
# 我们让开始点为0,结束点为0,元素个数为10,看看输出结果。

a = np.logspace(0,0,10)

# 输出结果
print(a)   # [1,1,1,1,1,1,1,1,1,1]


# 假如,我们想要改变基数,不让它以10为底数,我们可以改变base参数,将其设置为2

a = np.logspace(0,9,10, base=2)

# 输出结果
print(a)   # [1.,2.,4.,8.,16.,32.,~~~~~~,512.]

3.8. 等差数列 ( linspace )

代码如下(示例):

# np.linspace等差数列
# np.linspace是用于创建一个一维数组,并且是等差数列构成的一维数组,它最常用的有三个参数。
# 第一个例子,用到三个参数,第一个参数表示起始点,第二个参数表示终止点,第三个参数表示数列的个数。
a = np.linspace(1,10,10)
print(a)  # [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]


# 可以使用参数endpoiint来决定是否包含终止值,默认值是True
a = np.linspace(1,10,10,endpoint=False)
print(a)  # [1.  1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]

四、Numpy的内置函数

4.1. 基本函数

1、np.ceil(): 向上最接近的整数,参数是 number 或 array
2、np.floor(): 向下最接近的整数,参数是 number 或 array
3、np.rint(): 四舍五入,参数是 number 或 array
4、np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
5、np.multiply(): 元素相乘,参数是 number 或 array
6、np.divide(): 元素相除,参数是 number 或 array
7、np.abs():元素的绝对值,参数是 number 或 array
8、np.where(condition, x, y): 三元运算符,x if condition else y

# 注意: 需要注意multiply/divide 如果是两个ndarray进行运算 shape必须一致
arr = np.random.randn(2, 3)
print(arr)                # [[0.22519249 -0.6241801   0.18576015]
			              #  [1.79683596  0.36047647 -0.56127028]]
			       
print(np.ceil(arr))       # [[ 1. -0.  1.]
						  #  [ 2.  1. -0.]]
						  
print(np.floor(arr))	  # [[ 0. -1.  0.]
                          #  [ 1.  0. -1.]]

print(np.rint(arr))       # [[ 0. -1.  0.]
                          #  [ 2.  0. -1.]]

print(np.isnan(arr))      # [[False False False]
                          #  [False False False]]

print(np.multiply(arr, arr))   # [[0.05071166 0.38960079 0.03450683]
                               #  [3.22861945 0.12994329 0.31502433]]

print(np.divide(arr, arr))     # [[1. 1. 1.]
                               #  [1. 1. 1.]]

print(np.where(arr > 0, 1, -1))  # [[ 1 -1  1]
                                 #  [ 1  1 -1]]

4.2. 统计函数

1、np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
2、np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
3、np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
4、np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
5、np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array

 # 多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

arr = np.arange(12).reshape(3, 4)
print(arr)            # [[ 0  1  2  3]
                      #  [ 4  5  6  7]
                      #  [ 8  9 10 11]]


# 返回一个一维数组, 每个元素都是之前所有元素的 累加和
print(np.cumsum(arr))     #  [ 0  1  3  6 10 15 21 28 36 45 55 66]


# 所有元素的和
print(np.sum(arr))        # 66

# 数组的按列统计和
print(np.sum(arr, axis = 0))   # [12 15 18 21]

#数组的按行统计和
print(np.sum(arr, axis = 1))   # [ 6 22 38]





4.3. 比较函数

  • 假如我们想要知道矩阵a和矩阵b中所有对应元素是否相等,我们需要使用all方法
  • 假如我们想要知道矩阵a和矩阵b中对应元素是否有一个相等,我们需要使用any方法

代码如下(示例):

# np.any(): 至少有一个元素满足指定条件,返回True
# np.all(): 所有的元素满足指定条件,返回True


arr = np.random.randn(2, 3)
print(arr)             # [[0.62062377 0.40942285 0.2950361 ]
                       #  [0.21878013 0.92271838 1.67930325]]


print(np.any(arr > 0)) # True
print(np.all(arr > 0)) # True

4.4. 去重函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合

arr = np.array([[1, 2, 1], [2, 3, 4]])

print(arr)        # [[1 2 1]
                  #  [2 3 4]]
                  
print(np.unique(arr))  # [1 2 3 4]

4.5. 排序函数

代码如下(示例):

arr = np.array([1, 2, 34, 5])
print("原数组arr:", arr)        # 原数组arr: [ 1  2 34  5]

# np.sort()函数排序, 返回排序后的副本
sortarr1 = np.sort(arr)
print("numpy.sort()函数排序后的数组:", sortarr1)    # numpy.sort()函数排序后的数组: [ 1  2  5 34]

# ndarray直接调用sort, 在原数据上进行修改
arr.sort()
print("数组.sort()方法排序:", arr)       # 数组.sort()方法排序: [ 1  2  5 34]

五、Numpy运算

5.1. 加减、点乘、除法

  • 都是对应元素进行加减乘除,所以要求两个数组的行列都要一样

代码如下(示例):

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[1, 2, 3], [4, 5, 6]])
c = a - b
d = a + b
e = a * b
f = a / b
print("数组a:", a)           # 数组a: [[1 2 3]
                            #         [4 5 6]]
                            
print("数组b:", b)			#  数组b: [[1 2 3]
                            #          [4 5 6]]
                            
print("数组运算a-b:", c)     #  数组运算a-b: [[0 0 0]
                            #                [0 0 0]]
                            
print("数组运算a+b:", d)     #  数组运算a+b: [[ 2  4  6]
                            #               [ 8 10 12]]
                            
print("数组运算a*b:", e)	    #  数组运算a*b: [[ 1  4  9]
						    #                [16 25 36]]


print(np.multiply(a, b))     # 效果同上  
						    
print("数组运算a/b:", f)     # 数组运算a/b: [[1. 1. 1.]
                            #               [1. 1. 1.]]

5.2. 矩阵相乘(外积)

arr_a.dot(arr_b) 前提` arr_a 列数 = arr_b行数

import numpy as np

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[6, 23], [-1, 7], [8, 9]])

print(x)            #  [[1 2 3]
                    #    [4 5 6]]

print(y)            #  [[ 6 23]
                    #   [-1  7]
                    #   [ 8  9]]


# 就是拿 x的行乘以y 的列 乘积相加  1*6 + 2*(-1) + 3*8 = 28
#                               1*23 + 2*7 + 3*9 = 64
#                               4*6 + 5*(-1) + 6*8 = 67
#                               4*23 + 5*7 + 6*9 = 181

print(x.dot(y))     # [[ 28  64]
                    #  [ 67 181]]

print(np.dot(x, y))  # [[ 28  64]
                     #  [ 67 181]]

总结

  • 以上就是numpy中的属性跟函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React框架搭建,看这一篇就够了,看完你会感谢我

传统搭建框架的方式 在2024年以前&#xff0c;我们构建框架基本上采用官方脚手架&#xff0c;但是官方脚手架其实大概率都不符合我们的项目要求&#xff0c;搭建完了以后往往需要再继续集成一些第三方的包。这时候又会碰到一些版本冲突&#xff0c;配置教程等&#xff0c;往往…

C++入门基础知识九

1.string类对象的容量操作 函数名称功能说明size返回字符串有效长度length返回字符串有效长度capacity返回总空间大小empty检测字符串是否为空&#xff0c;为空返回true&#xff0c;否则falseclear清空有效字符reserve为字符预留空间number大小空间resize将有效字符改为n个&am…

Qt窗口——QToolBar

文章目录 工具栏创建工具栏设置toolTip工具栏配合菜单栏工具栏浮动状态 工具栏 QToolBar工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。 可以有多个&#xff0c;也可以没有。 创建工具栏 #include "mainwindow.h" #include "ui_mainwindow.h&qu…

【Python报错已解决】ModuleNotFoundError: No module named ‘sklearn‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

App Fiddler抓包配置

1. 概述 Android Fiddler是一个非常强大的抓包工具&#xff0c;可以用来捕获并分析Android设备上的网络请求和响应。在实现"android fiddler 抓包https"的过程中&#xff0c;我们需要进行以下步骤&#xff1a; 安装Fiddler并配置代理 配置Android设备的网络代理 在Fi…

机器人的动力学——牛顿欧拉,拉格朗日,凯恩

机器人的动力学推导方法有很多&#xff0c;常用得有牛顿&#xff0c;拉格朗日&#xff0c;凯恩等方法&#xff0c;接下来&#xff0c;简单说说他们之间的使用。注&#xff1a;这里不考虑怎么来的&#xff0c;只说怎么应用。 参考1&#xff1a;4-14动力学分析方法-牛顿—欧拉方…

linux下的日志编写

1、日志初始化创建 2、日志写入 3、日志关闭 log.c #include "log.h"static log_t LOG;//初始化日志文件&#xff0c;在当前目录创建日志文件 int log_init(char *pdirname) {time_t t;struct tm *ptm NULL;char filepath[64] {0};int ret 0;time(&t);ptm …

MySQL_表的基本操作

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

Contact Form 7最新5.9.8版错误修复方案

最近有多位用户反应Contact Form 7最新5.9.8版的管理页面有错误如下图所示 具体错误文件的路径为wp-content\plugins\contact-form-7\admin\includes\welcome-panel.php on line 153 找到welcome-panel.php这个文件编辑它&#xff0c;将如下图选中的部分删除 删除以后&#xf…

华为OD机试 - 报数问题 - 约瑟夫环(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

python画图|在3D图上画2D直方图(作图平面移动)

前期我们已经学习过2D和3D的直方图绘制&#xff1a; 二维常规直方图绘制&#xff1a;python画图|水平直方图绘制_绘制水平直方图-CSDN博客 二维极坐标直方图绘制&#xff1a;python画图|极坐标中画直方图_ax1.plot()怎么画直方图-CSDN博客 三维直方图绘制&#xff1a;python…

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化)&#xff0c;简单描述框架组成 Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c; 为Java应用程序开发…

使用Addressables+SpriteAtlas打包产生冗余

1&#xff09;使用AddressablesSpriteAtlas打包产生冗余 2&#xff09;使用SBP打AssetBundle脚本引用丢失 3&#xff09;Unity构建后处理&#xff08;IPostprocessBuildWithReport等接口&#xff09;抛出异常后&#xff0c;构建不会停止 4&#xff09;Unity 2022.3.0版本使用Oc…

基于YOLOv8的RTSP视频流实时目标检测与告警系统设计与实现(超详细)

前言 在训练模型完成后&#xff0c;想把模型应用起来&#xff0c;比如模型可以部署到项目中&#xff0c;实时接收RTSP视频流进行识别检测&#xff0c;一旦达到自己所设置的置信度阈值&#xff08;例如大于0.5&#xff09;&#xff0c;系统就会实时把报警信息发送给服务端&…

基于web的工作管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

01 Vim 编辑器的简单使用

目前在类liunx系统上&#xff0c;我们使用比较多的是 vim 编辑器。vim 具有程序编辑的能力&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。 文章目录 1 vim介绍2 vim 三种模式3 常用快捷键一般模式操作&#xff1a;切换模式操作&#xff1a;增删…

体感魂斗罗(一)

文章目录 体感魂斗罗实现步骤设备读取摄像头视频流使用电脑摄像头读取局域网内手机摄像头效果示意IP摄像头底部工具栏 体感魂斗罗实现步骤 目前想到的有如下步骤 读取摄像头视频流图像检测人体关键点关键点转换为人体姿势固定姿势转换键盘键位 设备 摄像头&#xff08;可用手…

[数据集][目标检测]文本表格检测数据集VOC+YOLO格式6688张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6688 标注数量(xml文件个数)&#xff1a;6688 标注数量(txt文件个数)&#xff1a;6688 标注…

上半年亏损扩大/百亿资产重组终止,路畅科技如何“脱困”?

在智能网联汽车市场形势一片大好的前提下&#xff0c;路畅科技上半年的营收却出现了下滑&#xff0c;并且亏损也进一步扩大。 2024年半年度报告显示&#xff0c;路畅科技营业收入1.35亿元&#xff0c;同比下滑7.83%&#xff1b;实现归属上市公司股东的净利润为亏损2491.99万元…

【oj刷题】二分查找篇:二分查找算法的原理和应用场景

前言&#xff1a; 二分查找算法&#xff0c;又称折半查找算法&#xff0c;是一种在有序数组中查找特定元素的高效查找方法。它通过将搜索区间不断缩小一半&#xff0c;从而在对数时间内找到目标元素。二分查找是基于分治策略的一种典型应用&#xff0c;能够高效的处理许多问题&…