【总结】Nupmy1

news2024/10/5 14:48:00

Nupmy

numpy的核心是名为ndarray的数据类型,它代表多维数组,封装了操作数据的运算和方法

1. 创建数组对象

1.1 方法1:array

  • 通过array将list转换成数据对象
# 通过array将list转换成数据对象
array1=np.array([1,2,3,4,5])
array1 # array([1, 2, 3, 4, 5])
array2=np.array([[1,2,3],[4,5,6]])
array2 # array([[1, 2, 3],[4, 5, 6]])
type(array1) # numpy.ndarray

1.2 方法2:arrage

# 方法2:通过arrage函数指定范围和跨度创建数据对象
# 左闭右开
array3=np.arange(1,100,2)
array3

1.3 方法3、4:linespace和logspace

  • linespace: 生成等差数列的数组
  • logspace: 生成等比数列的数组
# 方法3:通过linspace函数生成等差数列的数组
array4=np.linspace(-5,5,11)
array4 # array([-5., -4., -3., -2., -1.,  0.,  1.,  2.,  3.,  4.,  5.])
# 方法4:通过logspace函数生成等比数列的数组
# 从2^1 到 2^10,取20个
array5=np.logspace(1,10,base=2,num=20)
array5
array6=np.logspace(1,10,num=20)
array6

1.4 方法5:fromstring

  • 从字符串中获取数据创建数组
# 方法5:通过fromstring函数从字符串中获取数据创建数组
array6 = np.fromstring('1,2,3',sep=',',dtype='i8')
array6 # array([1, 2, 3], dtype=int64)

1.5 方法6:fromfile

  • 文件中读取数组创建数组对象
# 方法6:从文件中读取数组创建数组对象
array8=np.fromfile('priem.text',sep='\n',dtype='i8')
print(array8)

1.6 方法7:迭代器fromiter

# 迭代器 - 实现了迭代器新协议的对象,携带其协议是两个魔术方法:__iter__、__next__
# 生成器是迭代器的语法简化版本

def fib(n):
    a,b=0,1
    for _ in range(n):
        a,b=b,a+b
        yield a

gen = fib(50)
gen
gen1 = fib(150)
gen1
# 方法7:通过fromiter函数从迭代器中获取数据创建数组对象
array9 = np.fromiter(gen,dtype='i8')
array9

1.7 方法8:随机数

  • 生成随机元素创建数组对象

1)一维数组

# 方法8:生成随机元素创建数组对象
array10 = np.random.randint(1,100,size=20)
array10 # array([83, 92, 75, 62, 48, 88, 48, 90, 38, 32, 23, 76, 20, 91, 41,  8, 75,36, 88, 36])

2)二维数组

# 二维数组
array11 = np.random.randint(1,100,size=(5,3))
array11 # array([[14, 82, 94],[21, 17, 32],[60, 59, 22],[91,  8,  8],[ 1, 72, 99]])

3)三维数组

# 三维数组
array12 = np.random.randint(1,100,size=(3,5,4))
array12

请添加图片描述

4)小数数组

# 小数的数组
array13 = np.random.random(size=(2,3))
array13 # array([[0.14019347, 0.44462814, 0.83160303],[0.72572949, 0.78566251, 0.72816835]])

array13 = np.random.random(size=(3))
array13 # array([0.60514807, 0.76696852, 0.50408056])

5)正太分布

# 正态分布
array14 = np.random.normal(0,1,5000)
array14

6)二项分布

# 二项分布
array15=np.random.binomial(10,0.5,size=1000)
array15

1.8 方法9:ones

  • 创建全1的数组
# 方法9:通过ones函数创建全1的数组
# 浮点型
array15=np.ones((5,3))
array15

1.9 方法10:zeros

  • 创建全0的数组
# 方法10:通过zeros函数创建全0的数组
array16=np.zeros(10)
array16 # array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

1.10 方法11:full

  • 创建指定值的数组
# 方法11:通过full函数创建指定值的数组
array17=np.full((2,3),100)
array17 # array([[100, 100, 100],[100, 100, 100]])

1.11 方法12:eye

  • 单位矩阵
array18=np.eye(5)
array18 # 五行五列单位矩阵

1.12 方法13:加载图片创建

# 加载图片创建 - image
array19 = plt.imread('res/4.jpeg')
array19

# 数组形状
array19.shape # (400, 400, 3)
# 数组元素个数
array19.size # 480000
# 数组维度
array19.ndim # 3
# 数组数据类型
array19.dtype # dtype('uint8')
# 数组元素占用内存空间大小
array19.itemsize # 1
# 整个数组占用内存空间大小
array19.nbytes # 480000

2.数组对象的索引运算

2.1 普通索引

array20 = np.random.randint(1,100,10)
array20 # array([51, 25, 21, 52, 15, 80, 41, 75, 22, 45])

array20[0] # 51
array20[0]=99
array20[0] # 99
array20[-10] # 99
array21 = np.random.randint(60,101,(5,3))
array21
'''
array([[69, 99, 83],
       [69, 84, 61],
       [61, 62, 66],
       [72, 75, 95],
       [88, 74, 93]])
'''
array21[0]  # array([69, 99, 83])
array21[0][0]  # 69
array21[0,0]  # 69
array21[-2,-1]  # 95

2.2 花式索引

  • 用整数列表或数组充当数组索引

1)一维

array20 # array([99, 25, 21, 52, 15, 80, 41, 75, 22, 45])
array20[[2,4,5,-1]]  # array([21, 15, 80, 45])

array20[np.arange(5)] # array([99, 25, 21, 52, 15])

2)二维

array21
'''
array([[69, 99, 83],
       [69, 84, 61],
       [61, 62, 66],
       [72, 75, 95],
       [88, 74, 93]])
'''
array21[[1,2]] # array([[69, 84, 61],[61, 62, 66]])

array21[[1,2],[0,1]]  # array([69, 62])
array21[[1,2,-1],[0,1,-1]]  # array([69, 62, 93])

2.3 布尔索引

  • 用保存布尔值的数组或列表充当数组索引
array20  # array([99, 25, 87, 19, 94, 25,  8, 72, 32, 41])
# 跳过False,保留True
array20[[False,True,True,True,True,True,False,True,False,False]]  # array([25, 87, 19, 94, 25, 72])

array20>=60  # array([ True, False,  True, False,  True, False, False,  True, False,False])

array20[array20>=60]  # array([99, 87, 94, 72])

array20[array20 % 2 == 0]  # array([94,  8, 72, 32])

1)& 取两个数组对应布尔值做and运算

2)| 取两个数组对应布尔值做or运算

3)~ 对数组做not运算

array20[(array20>=40) & (array20 % 2 == 0)]  # array([94, 72])
array20[(array20>=40) | (array20 % 2 == 0)]  # array([99, 87, 94,  8, 72, 32, 41])
array20[~(array20>=40) | (array20 % 2 == 0)] # array([25, 19, 94, 25,  8, 72, 32])

2.4 切片索引

1)一维

array20 # array([99, 25, 87, 19, 94, 25,  8, 72, 32, 41])
array20[2:6] # array([87, 19, 94, 25])

2)二维

array21
'''
array([[ 73,  90, 100],
       [ 72,  68,  70],
       [ 61,  79,  70],
       [ 84,  82,  74],
       [ 81,  64,  98]])
'''
array21[::2,::2]
'''
array([[ 73, 100],
       [ 61,  70],
       [ 81,  98]])
'''

array21[:2,1:]
'''
array([[ 90, 100],
       [ 68,  70]])
'''

array21[2] # array([61, 79, 70])

array21[2:,:]
'''
array([[61, 79, 70],
       [84, 82, 74],
       [81, 64, 98]])
'''

3. 数组对象方法

  • 获取描述性统计信息
array20  # array([99, 25, 87, 19, 94, 25,  8, 72, 32, 41])

# 算术平均
array20.mean()  # 50.2
np.mean(array20)

# 中位数
np.median(array20)

# 排序
np.sort(array20) # array([ 8, 19, 25, 25, 32, 41, 72, 87, 94, 99])

# 百分位数
# 50%分位数
np.quantile(array20,0.5)

# [0.25,0.5,0.75] - [Q1下四分位数,Q2中位数,Q3上四分位数]
np.quantile(array20[0.25,0.5,0.75])

# 最大值
array20.max()

# 最小值
array20.min()

# 极差 - peak to peak
array20.ptp()
np.ptp(array20)

# 四分位距离
q1,q3 = np.quantile(array20,[0.25,0.75])

# 总体方差
# ddof = 0
array20.var()

# 样本方差
np.var(array20,ddof=1)

# 标准差
array20.std()

# 样本标准差
np.std(array20,ddof=1)

array21
'''
array([[ 73,  90, 100],
       [ 72,  68,  70],
       [ 61,  79,  70],
       [ 84,  82,  74],
       [ 81,  64,  98]])
'''
# 对每列求均值
array21.mean(axis=0) # array([74.2, 76.6, 82.4])

# 对每行求均值
array21.mean(axis=1).round(1)  # array([87.7, 70. , 70. , 80. , 81. ])

# 总体最值
array21.max()

4. 其他方法

array20  # array([ 8, 19, 25, 25, 32, 41, 72, 87, 94, 99])
array20.dtype # dtype('int32')
array22 = array20.astype('f8') # array([99., 25., 87., 19., 94., 25.,  8., 72., 32., 41.])
array20.dtype # dtype('float64')
array22 = array22.astype('i8') 
array22.dtype ## dtype('int64')

# 数组元素转换类型
array22 = np.arange(1,61)
array22
array22.reshape(3,20) # 从一维变成二维(3行20列)
array22.reshape(3,4,5) # 变成三维(4行5列)
array22.reshape(-1,3) # 变成二维(有三列)
array22.reshape(3,-1) # 变成二维(有三行)

# 将数组写进二进制文件中
# pickle序列化-python私有协议
array22.reshape(-1,4).dump('../res/my_array')

# 从二进制文件中加载数组对象
# allow_pickle=True - 允许反序列化(有风险操作)
array23 = np.load('../res/my_array',allow_pickle=True)

# 二维数组用tofile读入,维度会坍塌
array23.tofile('../res/my_array',sep=',')
array23

# 数组扁平化
array23.flatten()


  • nonzero
array24=np.array([0,0,0,0,0,0,25,0,0,0,0,0,98,0,0,0])
array24  # array([ 0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,  0, 98,  0,  0,  0])
array24.nonzero()  ## (array([ 6, 12], dtype=int64),)
array24[array24.nonzero()]  # array([25, 98])
  • 排序
# 排序 - 返回新对象
np.sort(array20)

# 排序 - 就地排序,直接改变原顺序
array20.sort()
array20
  • tolist:转化成列表
# 将数组转化成列表
my_list = array20.tolist()
my_list  # [8, 19, 25, 25, 32, 41, 72, 87, 94, 99]

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

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

相关文章

Nginx + fastCGI 实现动态网页部署

简介 本文章主要介绍下,如何通过Nginx fastCGI来部署动态网页。 CGI介绍 在介绍fastCGI之前先介绍下CGI是什么。CGI : Common Gateway Interface,公共网关接口。在物理层面上是一段程序,运行在服务器上,提供同客户端HTML页面的…

测试理论----Bug的严重程度(Severity)和优先级(Priority)的分类

【原文链接】测试理论----Bug的严重程度(Severity)和优先级(Priority)的分类 一、Bug的严重程度(Severity) Bug的Severity(严重程度)指的是一个Bug对软件系统功能影响的程度&#…

Java常用工具之Collections

目录 一、排序操作二、查找操作三、同步控制三、不可变集合四、其他五、CollectionUtils:Spring 和 Apache 都有提供的集合工具类六 、小结 Collections 是 JDK 提供的一个工具类,位于 java.util 包下,提供了一系列的静态方法,方便…

2023河海大学846软件工程学硕考研高分上岸经验分享

大家好,我是陪你考研每一天的大巴学长。 大巴学长为大家邀请到了2023年846软件工程学硕刚刚上岸的学长,为大家分享一下他的考研经验,经验里详细介绍了各科的复习方法,很有参考意义。 希望对大家有所借鉴和帮助,在此向…

栈实现队列(继续细起来啊)

生命不是要等待风暴过去,而是要学会在风暴中跳舞。 ——卡莉尔吉布朗目录 🍁一.栈实现队列 🍀二.使用两个栈实现队列的功能 🌼1.在队列的结构体中创建两个栈 🚁2.创建一个队列的结构体指针 🌉3…

云计算中的大数据处理:尝试HDFS和MapReduce的应用

云计算中的大数据处理:尝试HDFS和MapReduce的应用 文章目录 云计算中的大数据处理:尝试HDFS和MapReduce的应用一、前言二、第一题1、命令方式2、java API方式 三、第二题1、创建CSV文件并将其上传到HDFS2、编写利用MapReduce框架的java代码3、打包java项…

【设计模式与范式:创建型】41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?

从今天开始,我们正式进入到设计模式的学习。我们知道,经典的设计模式有 23 种。其中,常用的并不是很多。据我的工作经验来看,常用的可能都不到一半。如果随便抓一个程序员,让他说一说最熟悉的 3 种设计模式&#xff0c…

Kelvin和Rossby波 Part-2(浅水方程)

在前面博主有篇关于Kelvin和Rossby波的简要介绍,见下: Kelvin和Rossby波 Part-1(简要介绍) 开尔文波(Kelvin Wave)是发生在大气或海洋中的,迎向地形边界(例如海岸线)平衡…

回顾2023年计算机专业学生卑微求职 / 申博血泪史

0.前言 2023年是悲惨的一年,各个行业都在卷中卷。同时对于个人来说,2023年也是最忙碌的一年,不仅面临毕业,而且面临工作/读博,随便挑出一件,都是一件耗时耗力的事。相信大家也从网络上看到了很多的帖子或者…

文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么?

go语言的slice和rust语言的Vec的扩容流程是什么? 文心一言: 在Go语言中,slice(切片)和Rust语言中的Vec都是用于存储一组固定长度的元素的数据结构。它们的扩容流程略有不同,下面是它们的基本概述&#xf…

HNU数据结构与算法分析-作业3-树结构

1. (简答题) 5.1 定义满二叉树的每一个结点或者是一个分支结点,并恰好有两个非空子结点;或者是叶结点。 证明在有n个分支结点的所有二叉树中,满二叉树的叶结点的数目(或者叶结点与全部结点数的比例)是最高的。 5.6 …

Linux下安装配置maven

1.安装以及配置maven 1.1.下载maven安装包 首先需要切换到自己需要安装的目录 把配置都放到了:/root路径下 1.2.解压下载好的maven包 tar -zxvf apache-maven-3.6.0-bin.tar.gzcp -r apache-maven-3.6.0 /usr/local/1.3.配置maven环境变量 1.3.1.在环境变量中…

微信小程序nodejs+vue校园二手商城交易(积分兑换)38gw6

随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园二手交易被用户普遍使用,为方便用户能够可以随时…

chatgpt赋能Python-python3_8怎么设置字体大小

Python3.8如何设置文本字体大小 Python是一种高级编程语言,它在全球开发者中间得到了广泛的应用。随着Python的不断发展,Python 3.8版本也应运而生。在这个新版本中,有许多新的功能,其中一个是设置文本字体大小。本文将展示如何在…

redis高级篇三(分片集群)

一)进行测试Sentinel池: 集群的定义:所谓的集群,就是通过增加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态 之前的哨兵模式是存在着一些问题的,因为如果主节点挂了,那么sentinel集群会选举新的s…

一些题目__

好耶,第一次div2做出来3道题,虽然中间看了个题解,但是思路差不多,被复杂度困住了,nnd 首先是第一个题,emm 第一题 那么这个题的要求是,构造一个数组,满足这些条件: 注意…

Java学习路线(6)——方法

概念: 方法是一种语法结构,可以将一段代码封装成一个功能,方便复用。 特点: 提高代码复用性提高逻辑清晰性 一、基本方法定义和调用 1、有反有参方法 修饰符 返回类型 方法名( 形参列表 ){ 方法体代码; return 返回值; } public…

printf串口重定向标准方法

一,简介 在程序调试的过程中,需要用到串口打印信息来判断单片机程序运行是否正确。需要使用串口对printf进行重定向,本文就介绍一下ARM官方推荐的一种重定向的方法,供参考使用。 二,具体步骤 主要分为两步&#xff…

leetcode 138.复制带随机指针的链表

题目链接:leetcode 138 1.题目 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节…