Numpy基础

目录:

  • 一、简介:
  • 二、array数组ndarray:
    • 1.array( )创建数组:
    • 2.数组赋值和引用的区别:
    • 3.arange( )创建区间数组:
    • 4.linspace( )创建等差数列:
    • 5.logspace( )创建等比数列:
    • 6.zeros( )创建全0数组:
    • 7.ones( )创建全1数组:
    • 8.NumPy数组属性:
      • (1)shape属性:
      • (2)reshape属性:调整数组维度
    • 9.一维数组切片、索引操作:
    • 10.二维数组切片、索引操作:
    • 11.整数数组索引:
      • (1)一次性取多个元素,返回一维数组:
      • (2)一次性取多个元素,将待返回的一维数组重整成二维数组返回:
      • (3)一次性取连续的多行多列元素,返回二维数组:
      • (4)取特定行特定列不连续元素,返回二维数组:
    • 12.布尔数组索引:
      • (1)以数组形式返回数组x>6的元素:
      • (2)以数组形式返回数组中奇数的元素:
      • (3)根据True|False返回数组中符合要求的元素数组:
          • 取行:
          • 取列:
  • 三、广播机制:
  • 四、numpy统计:
    • 1.平均值:
    • 2.中位数:
    • 3.标准差:
    • 4.方差:
    • 5.最大值:
    • 6.最小值:
    • 7.加权平均值:
  • 五、自定义结构化数据类型:
        • *注:数据类型别名:*
  • 六、文件操作:
    • 1.读取普通文本文件:
    • 2.读取csv文件:
    • 3.读取不同列表示不同信息文件:
    • 4.空数据处理:
  • 七、随机数:
  • 八、numpy常用函数:
    • 1.resize( ):
    • 2.unique( ):
    • 3.sort( ):

一、简介:

  • 是Python 科学计算库,方便对数组、矩阵进行计算,包含大量线性代数、傅里叶变换、随机数等大量函数。
  • 直接以数组、矩阵为粒度计算并支撑大量的数学函数,效率高
  • 各种数据科学类库(Scikit-Learn、TensorFlow、Pandas)等的基础库

二、array数组ndarray:

1.array( )创建数组:

参数

import numpy as np
my_list = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
]
#先将my_list二维数组元素强转为float型,然后是用该数组创建二维ndarray数组
my_ndarray = np.array(my_list,float,ndmin=2)
print(my_ndarray)

在这里插入图片描述

2.数组赋值和引用的区别:

#1.引用机制(指针)
my_ndarray_copy = my_ndarray
print('my_ndarray的内存地址:',id(my_ndarray))
print('my_ndarray_copy的内存地址:',id(my_ndarray_copy))

#2.拷贝机制
my_ndarray_copy = np.array(my_ndarray)
print('my_ndarray的内存地址:',id(my_ndarray))
print('my_ndarray_copy的内存地址:',id(my_ndarray_copy))

在这里插入图片描述

3.arange( )创建区间数组:

在这里插入图片描述

a = np.arange(10,20,2,dtype=float)
print(a)

在这里插入图片描述

4.linspace( )创建等差数列:

等差数列在线性回归经常用作样本集

在这里插入图片描述

#创建起始值为0,终止值为100,样本数量为11的等差数列数组
b = np.linspace(0,100,11,dtype=int)
print(b)

在这里插入图片描述

5.logspace( )创建等比数列:

在这里插入图片描述

#首先将1-5区间均匀取3个数X(1,3,5),然后创建int型等比数列,元素值为X^base(起始值为1^2,终止值为5^2)
c = np.logspace(1,5,3,base=2,dtype=int)
print(c)

在这里插入图片描述

6.zeros( )创建全0数组:

在这里插入图片描述

'''
第一个参数:
	(a)表示a个元素的一维数组
	(a,b)表示a行b列的二维数组
	(a,b,c)表示a块,每块b行c列的三维数组	
'''
#创建2行2列的全0数组
d = np.zeros((2,2),dtype=int)
print(d)

在这里插入图片描述

7.ones( )创建全1数组:

参数同全0

'''
第一个参数:
	(a)表示a个元素的一维数组
	(a,b)表示a行b列的二维数组
	(a,b,c)表示a块,每块b行c列的三维数组	
'''
#创建2行2列的全1数组
e = np.ones((2,2),dtype=int)
print(e)

在这里插入图片描述

8.NumPy数组属性:

在这里插入图片描述

(1)shape属性:

  • shape返回值:
    • (a)表示a个元素的一维数组
    • (a,b)表示a行b列的二维数组
    • (a,b,c)表示a块,每块b行c列的三维数组

(2)reshape属性:调整数组维度

返回调整维度后的副本,而不改变原ndarray

f = np.arange(20).reshape(4,5)
print(f)

在这里插入图片描述

9.一维数组切片、索引操作:

在这里插入图片描述

  • 冒号::解释
    • [2]将返回与该索引相对应的单个元素
    • [2:7]将返回两个索引之间的元素,不包括停止索引
    • [2:]表示从该索引开始以后的所有元素都将被提取
    • [:7]表示该索引之前的所有元素都将被提取
    • [::-1]表示取反,从后往前取所有元素,步长为-1
a1 = np.arange(10)
print(a1)
#切片操作(注意是引用,a1、a2实际上指向同一片内存空间)
a2 = a1[2:7:2]
print(a2)

#理解引用机制,并理解索引=数组下标=位序-1,
a2[1]=888
print(a1)
print(a2)

在这里插入图片描述

10.二维数组切片、索引操作:

在这里插入图片描述

  • 冒号::解释
    • [2]将返回一维数组
    • [2][2]将返回特定元素
    • [2:7]将返回两个索引之间的一维数组集,即返回一个二维数组,不包括停止索引
    • [2:]表示从该索引开始以后的所有一维数组集,即返回一个二维数组都将被提取
    • [:7]表示该索引之前的所有一维数组集,即返回一个二维数组都将被提取
    • [...][1]表示[…]先取所有行即取所有元素,[1]再取所有行的第二行一维数组
    • [2,2]将返回特定元素
    • [...,1]或[:,1]返回第二列元素,组成一个一维数组返回
    • x[...,1:]返回第二列之后的所有列,组成一个二维数组返回

11.整数数组索引:

(1)一次性取多个元素,返回一维数组:

x = np.array([
    [1,2],
    [3,4],
    [5,6]
])
#[0,0,2]是行索引,[0,1,1]是列索引,表示取[0,0]、[0,1]、[2,1]的元素,组成一维数组返回
y = x[[0,0,2],[0,1,1]]
y

在这里插入图片描述

(2)一次性取多个元素,将待返回的一维数组重整成二维数组返回:

x = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
#行索引
r = np.array([0,0,0,2])
#列索引
c = np.array([0,1,2,2])
#x[r,c]根据索引获取一维数组,reshape(2,2)将返回的4*1一维数组转为2*2的二维数组
s = x[r,c].reshape(2,2)
s

在这里插入图片描述

(3)一次性取连续的多行多列元素,返回二维数组:

x = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
#行取2行3行,列取2列3列
y = x[1:3,1:3]
y

在这里插入图片描述

(4)取特定行特定列不连续元素,返回二维数组:

#取1,3行、1,3,4列所有元素
x = np.array([
    [1,2,3,4],
    [4,5,6,7],
    [7,8,9,10]
])
#先取1,3行,:可以换成...
temp = x[[0,2],:]
#再根据上一步结果取1,3,4列,:可以换成...
temp[:,[0,2,3]]

在这里插入图片描述

12.布尔数组索引:

  • 返回的结果需要经过布尔运算时,会使用到另一种高级索引方式,即布尔数组索引。

(1)以数组形式返回数组x>6的元素:

x = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
# 
x[x>6]

在这里插入图片描述

(2)以数组形式返回数组中奇数的元素:

x = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
#将数组中所有奇数置为-1(x[x%2!=0]获取奇数,=-1赋值)
x[x%2!=0] = -1
x

在这里插入图片描述

(3)根据True|False返回数组中符合要求的元素数组:

取行:
x = np.array([
    [1,2,3,4],
    [4,5,6,7],
    [7,8,9,10]
])
row = np.array([False,False,True])
print(x[row,...])

在这里插入图片描述

取列:
column = np.array([True,False,True,False])
x = np.array([
    [1,2,3,4],
    [4,5,6,7],
    [7,8,9,10]
])
print(x[...,column])

在这里插入图片描述

三、广播机制:

  • 广播是numpy对不同形状的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行。
    • (1)若两个数组形状相同,那么两个数组相乘即为数组对应位置元素相乘
    • (2)若两个数组形状不同,那么两个数组相乘就需要使用广播机制。
  • 广播机制的核心是对形状较小的数组,在横向或纵向的进行一定次数的重复,使其与形状较大的数组具有相同的维度后相加

在这里插入图片描述

  • 广播的规则:
    • 输出数组的形状是是输入数组形状的各个维度上的最大值。
    • 如果输入数组的某个维度和输出数组的对应维度的长度相同或输入数组的某个维度的长度为1时,这个输入数组能够用来计算,否则不能运算。
    • 输入数组的某个维度的长度为1时,沿着此维度运算时都用此维度上的第一组数组值。

四、numpy统计:

1.平均值:

x = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
#计算所有元素平均值
print(x.mean())
#从上至下计算每列平均值,返回一维数组
print(x.mean(axis=0))
#从左至右计算每行平均值,返回一维数组
print(x.mean(axis=1))

在这里插入图片描述

2.中位数:

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

在这里插入图片描述

3.标准差:

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

在这里插入图片描述

4.方差:

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

在这里插入图片描述

5.最大值:

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

在这里插入图片描述

6.最小值:

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

在这里插入图片描述

7.加权平均值:

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

在这里插入图片描述

五、自定义结构化数据类型:

#创建结构体
teacher = np.dtype([
    #(变量名称,变量数据类型->"数据类型别名+所占字节数")
    ("name","U8"),
    ("age","i1"),
    ("salary","f4")
])
#创建数组,数组元素为teacher类型
b = np.array(
    [
        ("clh",20,30000),
        ("ccc",18,10000)
    ],dtype = teacher
)
print("数组b内容为:",b)
print("数组中所有name:",b["name"])

在这里插入图片描述

注:数据类型别名:

在这里插入图片描述

六、文件操作:

在这里插入图片描述
注意:skiprows不忽略注释行和空白行,从文档第一行跳过

1.读取普通文本文件:

  • 文本文件一般用空格分隔数据
    在这里插入图片描述
data = np.loadtxt("data.txt",dtype=np.int32)

2.读取csv文件:

  • csv文件是以逗号分隔的文本文件
    在这里插入图片描述
data = np.loadtxt("data.csv",dtype=np.int32,delimiter=",")

3.读取不同列表示不同信息文件:

在这里插入图片描述

 #1.定义结构体
user_info = np.dtype(
    [
        ("name","U10"),
        ("age","i1"),
        ("gender","U1"),
        ("height","i2")
    ]
)
#2.用结构体类型接数据,并且使用skiprows跳过第一行不读
data = np.loadtxt("data.txt",dtype=user_info,skiprows=1,encoding="utf-8")

4.空数据处理:

#使用异常机制
def parse_age(age):
    try:
        return int(age)
    except:
        return 0
#converters调用自定义函数进行空数据处理        
data = np.loadtxt("data.csv",delimiter=",",usecols=1,converters={1:parse_age})  
    

七、随机数:

'''
(a)表示a个元素的一维数组
(a,b)表示a行b列的二维数组
(a,b,c)表示a块,每块b行c列的三维数组
'''


#创建[0,1)内给定维度的随机数组,该组元素符合正态分布
np.random.rand(3,3)

#返回5*5个[1,5)内的随机整数
np.random.randint(1,5,size=(5,5))

八、numpy常用函数:

在这里插入图片描述

1.resize( ):

#元素不够时使用原数组数据补齐
a = np.array([1,2,3,4,5,6,7,8,9])
np.resize(a,(4,4))

在这里插入图片描述

#元素不够时使用0补齐
a = np.array([1,2,3,4,5,6,7,8,9])
a.resize((4,4),refcheck=False)
a

在这里插入图片描述

2.unique( ):

#去重+排序,返回去重后的数组+元素所在原数组的索引+各元素重复次数
a = np.array([2,3,4,5,6,1,2,3])
b,indices,nums = np.unique(a,return_index=True,return_counts=True)
print(b)
print(indices)
print(nums)

在这里插入图片描述

3.sort( ):

#结构体
teacher = np.dtype([
    #(变量名称,变量数据类型)
    ("name","U8"),
    ("age","i1"),
    ("salary","f4")
])
#创建数组,数组元素为teacher类型
b = np.array(
    [
        ("clh",20,30000),
        ("ccc",18,10000)
    ],dtype = teacher
)
#按年龄排序
np.sort(b,order="age")

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring源码之依赖注入(二)

书接上文 文章目录 一. Autowire底层注入逻辑1. 属性注入逻辑 一. Autowire底层注入逻辑 前面我们分析了Spring时如何找到某个目标类的所有注入点这一个核心逻辑,但还没又对核心注入方法inject进行详细分析,下面我们就来详细分析Spring拿到所有的注入点…

每日一题——LeetCode1005.K次取反后最大化的数组和

方法一 个人方法&#xff1a; 将数组从小到大排序后&#xff0c;假设数组共有n个负数&#xff0c;要使数组的和尽可能大就要尽可能将较大的负数变为正数&#xff0c;有以下几种情况&#xff1a; 1、k<n&#xff0c;那就把数组前k个负数都转为正数即可。 2、k>n&#xf…

立体匹配算法(Stereo correspondence)

SGM(Semi-Global Matching)原理&#xff1a; SGM的原理在wiki百科和matlab官网上有比较详细的解释&#xff1a; wiki matlab 如果想完全了解原理还是建议看原论文 paper&#xff08;我就不看了&#xff0c;懒癌犯了。&#xff09; 优质论文解读和代码实现 一位大神自己用c实现…

15、Kubernetes核心技术 - 探针

目录 一、概述 二、探针类型 2.1、就绪探针&#xff08;Readiness Probe&#xff09; 2.2、存活探针&#xff08;Liveness Probe&#xff09; 三、探针探测方法 3.1、exec 3.2、httpGet 3.3、tcpSocket 四、探针配置项 五、探针使用 5.1、就绪探针&#xff08;Readin…

智慧工厂UWB技术定位系统源码,工厂人员轨迹定位系统源码

智慧工厂人员定位系统通过在作业现场部署UWB高精度定位设备及网络&#xff0c;实现人、车、物的实时位置监控。搭建二维或三维业务功能展现平台&#xff0c;集成现场视频监控、门禁系统&#xff0c;实现工厂人员定位与视频监控和门禁联动&#xff0c;实时掌握全厂人员、车辆、作…

C#_var

文章目录 一、前言二、隐式类型的局部变量2.1 var和匿名类型2.2 批注 三、总结 一、前言 C#中有一个 var 类型&#xff0c;不管什么类型的变量&#xff0c;都可以用它接收&#xff0c;实属懒人最爱了。 我没有了解过它的底层&#xff0c;甚至没看过它的说明文档&#xff0c;也…

2023年安全狗答卷:十年命题 安全以赴

你好 2024 2023年&#xff0c;既是网络安全攻防变化的一年 也是安全狗2013年到2023年十年发展里 浓墨重彩的一笔 在新故相推之间 安全狗怀揣着不变的守护初心 迎来了十年安全命题的新起点 2024年&#xff0c;坚守安全&#xff0c;拥抱新命题

SpringBoot整合Elasticsearch报错

本文来记录一下SpringBoot整合Elasticsearch报错 文章目录 报错如下报错原因es7.15.2版本下载 报错如下 报错如下 2024-01-02 15:09:10.349 ERROR 134936 --- [nio-8088-exec-6] o.a.c.c.C.[.[.[/]. [dispatcherServlet] : Servlet.service() for servlet [dispatcherServle…

人工智能在金融领域的应用存在的4大挑战

金融服务供应商应该有计划地应对AI面临的难题 金融行业投资人工智能热潮带来有关数据安全和透明度的新问题。由于数据管理实践随着新的 AI 解决方案的引入而不断发展&#xff0c;应对这些新问题以及金融服务领域 AI 面临的其他挑战尤为重要。各组织必须认识到可能面临以下挑战…

Sharding Sphere 教程 简介

一 文档简介 1.1 分库分表诞生的前景 随着系统用户运行时间还有用户数量越来越多&#xff0c;整个数据库某些表的体积急剧上升&#xff0c;导致CRUD的时候性能严重下降&#xff0c;还容易造成系统假死。 这时候系统都会做一些基本的优化&#xff0c;比如加索引…

Java版商城:Spring Cloud+SpringBoot b2b2c电子商务平台,多商家入驻、直播带货及免 费 小程序商城搭建

​随着互联网的快速发展&#xff0c;越来越多的企业开始注重数字化转型&#xff0c;以提升自身的竞争力和运营效率。在这个背景下&#xff0c;鸿鹄云商SAAS云产品应运而生&#xff0c;为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的…

钉钉-蓝牙打卡和平台打卡的区别

钉钉的群是部门概念。 你的账号归属到哪个群&#xff0c;就是哪个群的员工。 -------------------------------------------------------------------- 蓝牙打卡是对账号归属进行打卡的。 平台打卡是只对属于自己平台内的账号打卡的。 ----------------------------------…

安装多版本node

下载不同版本的安装包&#xff0c;windows系统&#xff0c;下载.msi格式的安装包&#xff1a;node版本可以去node中网网下载 或者在这里下载 Index of /dist/&#xff1b; 安装过程由低版本到高版本安装&#xff1b; 在安装下一个版本之前&#xff0c;先修改上一个版本文件夹…

C++基本语言:1.9迭代器精彩演绎,失效分析及弥补、实战

C基本语言包含10章节内容&#xff0c;存于C从入门到精通专栏 目录 一、迭代器简介 二、容器的迭代器类型 三、迭代器begin()/end()、反向迭代器rbegin/rend操作 1&#xff0e;迭代器 1.1begin和end 1.2 反向迭代器 rbegin&#xff08;&#xff09;和rend&#xff08;&am…

C++ DAY5 作业

1.全局变量&#xff0c;int monster 10000;定义英雄类hero&#xff0c;受保护的属性string name&#xff0c;int hp.int attck;公有的无参构造&#xff0c;有参构造&#xff0c;虚成员函数void Atk()blood-0;}&#xff0c;法师类继承自英雄类&#xff0c;私有属性int ap_atk50…

MatrixOne 1.1.0 Release

我们非常高兴地宣布&#xff1a; MatrixOne内核1.1.0版本 正式发布啦&#xff01; 项目文档网站 https://docs.matrixorigin.cn MatrixOne是一款分布式超融合异构数据库&#xff0c;MatrixOne旨在提供一个云原生、高性能、高弹性、高度兼容MySQL的HSTAP数据库&#xff0c;让…

SpringCloud微服务架构,适合接私(附源码)

一个由商业级项目升级优化而来的微服务架构&#xff0c;采用SpringBoot 2.7 、SpringCloud 等核心技术构建&#xff0c;提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。 架构图 项目介绍 用户权益 仅允许免费用于学习、毕设、公司项目、私活等。…

Java技术栈 —— Hadoop入门(一)

Java技术栈 —— Hadoop入门&#xff08;一&#xff09; 一、Hadoop第一印象二、安装Hadoop三、Hadoop解析3.1 Hadoop生态介绍3.1.1 MapReduce - 核心组件3.1.2 HDFS - 核心组件3.1.3 YARN - 核心组件3.1.4 其它组件3.1.4.1 HBase3.1.4.2 Hive3.1.4.3 Spark 一、Hadoop第一印象…

IoTDB 集群部署——windows

本文的测试环境为window server2016&#xff0c;版本包为1.1.0&#xff0c;jdk版本为1.8 首先下载IoTDB版本包&#xff0c;链接地址如下 https://archive.apache.org/dist/iotdb/1.1.0/apache-iotdb-1.1.0-all-bin.zip 本次部署将使用1个ConfigNode 和3个DataNode模式&#…

Java基础-----集合类(一)

文章目录 1.集合类简介2. 自定义集合类 1.集合类简介 集合和数组一样&#xff0c;都是用来存储多个数据的结构&#xff0c;也可以称作容器。 数组长度是不可变化的&#xff0c;一旦在初始化数组时指定了数组长度&#xff0c;这个长度就不可变。如果需要处理数量变化的数据&am…