数据分析---Python科学计算库-Numpy学习(一)

news2024/12/27 14:01:51

一,简介

1.1什么是数据分析

  1. 数据分析是指通过使用各种统计学、计算机科学和数学技术,对收集来的数据进行处理、整理、解释和呈现,从而提取出数据中有用的信息和洞察,并帮助做出更明智的决策。数据分析可以应用于各种不同的领域和行业,包括商业、科学、医疗保健、政府等。在数据分析中,人们可以利用不同的数据分析工具和技术,例如数据挖掘、机器学习、数据可视化等,以获得更深入的理解和知识。

1.2使用python做数据分析常用的库

  1. numpy:基础数值算法
  2. scipy:科学计算
  3. matplotlib:数据可视化
  4. pandas:序列高级函数

1.3什么是Numpy库:Numerical Python

  1. NumPy是一个Python库,用于科学计算和数值计算。它为Python提供了一个强大的多维数组对象和一系列的函数,用于处理这些数组。NumPy是科学计算领域中最为常用的Python库之一,因为它可以让开发者高效地处理数值数据,包括线性代数、傅里叶变换和随机数生成等操作

1.4为什么使用Numpy库

对于同样的数值计算任务,使用Numpy比直接编写python代码实现的优点:

  1. 代码简洁:Numpy直接以数组,矩阵作为粒度今次那个计算并支持大量的数字函数,而python需要for循环从底层实现。
  2. 性能更高效:Numpy的数组存储效率和输入输出计算性能,比Python使用List或者嵌套List好很多。因为Numpy的数据存储与Python原生List不同,Numpy的大部分代码都是C语言实现的,这也是Numpy比python代码高效的原因。

1.5Numpy安装

  1. 在pycharm中打开终端,由于我安装的python的3.X,使用命令安装numpy:pip3 install numpy
    在这里插入图片描述
  2. 检查是否安装好:`python -c “import numpy; print(numpy.version)”
    在这里插入图片描述

二,Numpy数组

2.1ndarray数组

  1. ndarray 是一个用于多维数组对象的 NumPy 库的核心数据类型。它是一个具有相同数据类型元素的固定大小数组,而且所有元素都在连续的内存块中存储
  2. ndarray 对象的重要属性包括:
    (1)shape: 数组的维度,例如,一个 n 行 m 列的数组,它的 shape 属性将是 (n, m)。
    (2)dtype: 数组中元素的数据类型,例如,int32, float64 等。
    (3)ndim: 数组的维度数,例如,一个二维数组的 ndim 是 2。
  3. ndarray 对象可以通过很多方式创建,包括:
    (1)从 Python 列表或元组转换。
    (2)使用 NumPy 的函数,例如,numpy.zeros() 或 numpy.ones()。
    (3)从文件中读取数据。
  4. 以下是一个使用 NumPy 创建 ndarray 的示例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.shape)
print(a.dtype)
print(a.ndim)

在这里插入图片描述
5. 简单数组计算实现:

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a.shape=(2,3)#将一维数组改成二行三列
print(a*3)#数组运算,所有元素乘3
print(a)
print(a>3)#判断所有元素是否大于3
print(a+a)#两个数组对应位置元素相加,必须保证维度一样
# print(a.shape)
# print(a.dtype)
# print(a.ndim)

在这里插入图片描述

2.2ndnarray底层存储原理

(1)在 NumPy 中,ndarray 的底层存储是连续的一段内存空间。该内存空间中保存的是多维数组中的元素。对于一维数组,元素按照顺序存储在连续的内存空间中;对于二维数组,元素也是按照行优先顺序存储的,即第一行的元素存储在内存的前面,第二行的元素紧随其后,以此类推;对于高维数组,元素的存储方式也是按照行优先的方式进行的。

(2)NumPy 中的 ndarray 还包含了元素的数据类型以及数组的形状等信息。因此,在对 ndarray 进行切片、索引等操作时,NumPy 会通过计算偏移量和步长等信息,直接访问对应的内存位置,从而实现高效的数组操作。

(3)由于 ndarray 底层存储是连续的一段内存空间,因此在对数组进行大量计算时,可以利用现代处理器的缓存机制,提高计算效率。此外,ndarray 的内存管理也比较灵活,可以通过设置数组的 strides、dtype 等属性,实现对数组的内存分配和释放等操作。

2.2.1内存中的ndarray对象

  1. 元数据(metadata):存储对目标数组的描述信息:dim count,dtype,data等。
  2. 实际数据:完整的数组数据,将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,访问元数据,对元数据进行操作,提高性能。
    在这里插入图片描述
  3. ndarray数组对象的特点:
    (1)Numpy数组是同质数组:即所有元素的数据类型一致。
    (2)Nump数组的下标从0开始,最后一个元素的下标为数组长度减一。

2.3ndarray数组对象的创建

(1)正常方式创建:

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])

(2)通过arang()方法:

array1=np.arange(1,9,2)
print(array1)

在这里插入图片描述
参数信息:
在这里插入图片描述
(3)创建全为零的数组

array2=np.zeros(10,dtype='int32')
print(array2)

在这里插入图片描述

(4)#创建全为一数组

array3=np.ones(shape=(3,2),dtype='float32')
print(array3)

在这里插入图片描述

2.4ndarray属性的基本操作

  1. NumPy中的ndarray是一个多维数组对象,具有许多有用的属性和方法,以下是一些常见的属性操作示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 输出 (2, 3)
arr.shape = (3, 2)
print(arr) # 输出 [[1 2]
           #      [3 4]
           #      [5 6]]
  1. 数据类型操作:
import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype) # 输出 int64
arr = np.array([1.0, 2.0, 3.0])

print(arr.dtype) # 输出 float64
arr = np.array(['a', 'b', 'c'])
print(arr.dtype) # 输出 <U1

注意:想要获得一个与arry数组数据一样但数据类型不一样的数组,不可以直接将arry的数据类型进行改变,容易出错,正确的做法是使用astype()方法,创建一个新数组。

import numpy as np
arr = np.array([1, 2, 3])
arry2=arry.astype('float32')
  1. 维度操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 输出 2
arr = np.array([1, 2, 3])
print(arr.ndim) # 输出 1
  1. 元素数量操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.size) # 输出 6
arr = np.array([1, 2, 3])
print(arr.size) # 输出 3
  1. 数据存储类型操作:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.itemsize) # 输出 8
arr = np.array([1, 2, 3])
print(arr.itemsize) # 输出 8

2.5对ndarray数组进行索引切片

2.5.1通过索引访问数组元素

(1)可以使用方括号[]和索引值来访问数组中的单个元素,例如:

import numpy as np

# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 访问第2行第3列的元素
print(a[1, 2])  # 输出:6

2.5.2通过切片访问数组子集

(1)使用冒号:分隔符可以创建切片对象,它可以用于访问数组的子集。切片对象包括start:stop:step,其中start是开始索引值,stop是结束索引值,step是步长。

# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 访问第2行的所有元素
print(a[1, :])  # 输出:[4 5 6]

# 访问第2列的所有元素
print(a[:, 1])  # 输出:[2 5 8]

# 访问第2行到第3行,第1列到第2列的所有元素
print(a[1:3, 0:2])  # 输出:[[4 5] [7 8]]

需要注意的是,使用切片返回的是一个新的ndarray数组,而不是原数组的视图。因此,对切片返回的数组进行修改不会影响原数组的值。

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

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

相关文章

MapReduce源码解读-2

MapReduce源码解读-2 MapReduceInputFormat类getSplitsCreateRecordReader Mapper类OutputCollectorMapOutputBufferPartitioner 分区环形缓冲区 Circular buffer初始化 Spill、Sort溢写、排序Merge 合并combiner 规约 Reduce阶段ReduceTask第一层调用 ReduceTask.run -shuffle…

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…

【大数据之Hadoop】二十八、生产调优-HDFS集群扩容及缩容

增加或缩减服务器&#xff0c;注意不允许白名单和黑名单同时出现同一个主机。 1 服役新服务器 原有数据节点不能满足数据存储需求时&#xff0c;需要在原有集群的基础上动态增加节点&#xff0c;即动态增加服务器&#xff0c;增加服务器的同时不需要重启集群。 hadoop完全分布…

JVM相关知识点

java内存区域 线程私有的&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享的&#xff1a; 堆方法区直接内存 程序计数器&#xff1a;记录当前线程执行的位置 当线程切换后能够知道该线程上次运行到哪了 java虚拟机栈&#xff1a; 方法调用的数据通过栈进行传递&#…

一篇文章带你重新回溯单链表的所有

&#x1f349;博客主页&#xff1a;阿博历练记 &#x1f4d7;文章专栏&#xff1a;数据结构与算法 &#x1f69a;代码仓库&#xff1a;阿博编程日记 &#x1f339;欢迎关注&#xff1a;欢迎友友们订阅收藏关注哦 文章目录 &#x1f34c;前言&#x1f4bb;无头单向非循环链表&am…

SSM(Spring、SpringMVC、MyBatis)整合、配置

SpringMVC是一个表述层(前台的页面和后台的servlet)框架&#xff0c;处理浏览器发送到服务器的请求&#xff0c;并且将一些数据响应到浏览器 MyBatis是一个持久层框架&#xff0c;帮助我们连接数据库&#xff0c;访问数据库&#xff0c;操作数据库中的数据 Spring是一个整合型框…

毕业论文相关

毕业论文参考文献和Word保存 一、Word中出现[7-9]多个文献的引用 在正文中选中参考文献角标&#xff0c;右击选择“切换域代码”&#xff0c;参考文献角标[7][8][9]变为{ REF _Ref98345319 \r \h * MERGEFORMAT }{ REF _Ref98345321 \r \h * MERGEFORMAT }{ REF _Ref99390603…

AQS独占锁之ReentrantLock源码调试(JDK8)

前言&#xff1a; 为什么需要学习ReentrantLock? 目前项目开发中使用到的几乎都是分布式锁&#xff0c;平时可能很少用到java自带的锁&#xff1b; 但实际在我们java的源码中&#xff0c;随处可见需要使用锁来保证线程安全&#xff0c;所以还是有必要学习下ReentrantLock。 1…

7.分区表和分桶表

1.创建分区表 create table dept_partition(deptno int,dname string,loc int ) partitioned by (dt string) // 分区字段(date) row format delimited fields terminated by \t; 2.增删改查操作 2.1 插入数据 1&#xff09;导入本地数据 -- 创建一个名字为dt2022-06-14的…

R语言 | 输入与输出

目录 一、认识文件夹 1.1 getwd()函数 1.2 setwd()函数 1.3 file.path()函数 1.4 dir()函数 1.5 list.files()函数 1.6 file.exists()函数 1.7 file.rename()函数 1.8 file.create()函数 1.9 file.copy()函数 ​1.10 file.remove()函数 二、数据输出&#xff1a;ca…

单片机c51中断 — 中断扫描法行列式键盘

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章&#xff0c;中断 在第4章中已介绍过行列式键盘的工作原理&#xff0c;并编写了相应的键盘扫描程序。但应注意的是&#xff0c;在单片机应用系统中&#xff0c;键盘扫描只是 CPU 工作的内容之一。CPU …

一文理清 TiDB 与 MySQL 中的常用字符集及排序规则

1. 字符集&#xff08;character set&#xff09; 1.1. 字符集与编码规则 字符集&#xff08;character set&#xff09;即为众多字符的集合。字符集为每个字符分配一个唯一的 ID&#xff0c;称为 “Code Point&#xff08;码点&#xff09;”。编码规则是将 Code Point 转换…

商户查询的缓存——缓存击穿问题

缓存击穿问题也叫热点key问题&#xff0c;就是一个被高并发访问并且缓存重建业务比较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击 常见的解决方案有两种&#xff1a; 互斥锁&#xff08;高并发时性能较差&#xff09; 逻辑过期 基于互斥锁方…

ASN.1-PKCS10-x509

在国际标准ITU-T X.690 《Information technology – ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)》中定义了ASN.1编码规则。对于一般数据类型&#xff08;比如Integer、octe…

【软件工程】自动化测试保证卓越软件工程能力(2)

本次内容我们抽象一个待测试的目标软件产品&#xff0c;产品是基于web开发的。 自动化平台不是独立存在的&#xff0c;必然有一个目标待测试产品&#xff0c;用自动化测试来反映产品功能是否还是好的。 产品抽象v1 第一个版本&#xff0c;使用者&#xff08;USER&#xff09;发…

配置本地Angular环境并使用VsCode调试Angular前端项目

配置本地Angular环境并使用VsCode调试Angular前端项目 配置本地Angular环境部署Node.Js本地环境配置一下环境变量 使用vscode调试Angular安装vscode 配置本地Angular环境 部署Node.Js本地环境 1 从官网下载node.js, 本文为(v16.13.0) 下载地址: https://nodejs.org/dist/v16.…

windows server 2016报错无法打开所需文件install.wim

报错的前提条件: 1.下载原版镜像后,使用UltraISO制作U盘系统盘。 2.正常安装系统,到“安装程序正在启动界面”时弹出错误窗口,报错“Windows无法打开所需的文件 E:\Source\install.win。请确保安装所需的所有文件可用,并重新启动安装。错误代码:0x80070026”。 问题原因…

【MySQL学习】MySQL表的复合查询

文章目录 前言一、案例准备二、基本查询三、多表查询四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 FROM子句中的子查询4.5 合并查询4.5.1 UNION4.5.2 UNION ALL 五、自连接六、内外连接6.1 内连接6.2 外连接6.2.1 左外连接6.2.2 右外连接 前言 对MySQL表的基本查…

大数据系列——Flink理论

概述 Flink是一个对有界和无界数据流进行有状态计算的分布式处理引擎和框架&#xff0c;既可以处理有界的批量数据集&#xff0c;也可以处理无界的实时流数据&#xff0c;为批处理和流处理提供了统一编程模型&#xff0c;其代码主要由 Java 实现&#xff0c;部分代码由 Scala实…

Java——Java选择题复习(1)(Java基础,进程,多线程,操作系统)

1. 下面关于程序编译说法正确的是&#xff08;&#xff09; A. java语言是编译型语言&#xff0c;会把java程序编译成二进制机器指令直接运行 B. java编译出来的目标文件与具体操作系统有关 C. java在运行时才进行翻译指令 D. java编译出来的目标文件&#xff0c;可以运行在任意…