【数据分析】numpy基础第一天

文章目录

    • 前言
    • 本文代码:
      • 使用jupyter notebook打开本文的代码操作示例
        • 步骤1.打开Anaconda Powershell Prompt
        • 步骤2.复制代码文件地址
        • 步骤3.在Anaconda Powershell Prompt中打开jupyter notebook
        • 步骤3.5.解决一个可能的问题
        • 步骤4.在浏览器中查看ipynb文件
        • 步骤5.运行代码
          • 首先,选中要运行的代码格
          • 重新运行文件中的所有代码
    • 1.安装Numpy
      • 步骤1.打开Anaconda Powershell Prompt
      • 步骤2.执行安装命令
    • 2.创建Numpy数组
      • 运行结果
    • 3.查看Numpy数组的属性
      • 运行结果
    • 4.一维数组的索引和切片
      • 运行结果
    • 5.二维数组的索引和切片
      • Numpy的写法和Python列表的写法
      • 运行结果
    • 总结

前言

我希望读者以阅读本文文字为辅,编写代码为主。如果感到一头雾水,请一边阅读本文,一边跟着敲出文中的代码,你会很快理解。另外,不必局限于本文的代码段,读者可以自由探索代码的行为,本文所涉及的部分必定是片面的,甚至可能会有谬误,读者必须学会自我探索才能真正理解并掌握。但是对于初学者来说,在入门阶段只需要留个印象,有个基本理解即可,在之后的不断实践中,初学者会自然而然的深入,不必担心自己理解不够,写就对了。

有任何问题请联系博主。

如果认为自己没什么基础,建议先跟随本文代码这个部分,学会怎么使用jupyter notebook运行本文的代码,顺便建立一个基本的理解。

本文代码:

  • 链接
  • 提取码:1024

使用jupyter notebook打开本文的代码操作示例

步骤1.打开Anaconda Powershell Prompt

点开下面这个应用
在这里插入图片描述

步骤2.复制代码文件地址

对着代码文件进行鼠标右键,复制地址。
在这里插入图片描述

步骤3.在Anaconda Powershell Prompt中打开jupyter notebook

打开命令的形式如下:

jupyter notebook 你复制的文件地址

在博主的主机中,示例如下:
在这里插入图片描述

步骤3.5.解决一个可能的问题

一般来说,执行了步骤3的命令是可以自动跳转到浏览器中查看代码的。

但有些用户可能不会自动跳转,这时候需要手动打开

在命令行中,通常会输出下图的内容,我们需要将红圈中的任意一个链接复制到浏览器中,就可以打开代码文件了。

在这里插入图片描述

步骤4.在浏览器中查看ipynb文件

在下面的格子中In [数字]:的就是代码格,至于没有In [数字]:的格子,那些是文章的段落,仅仅是我写给读者阅读的。
在这里插入图片描述

步骤5.运行代码
首先,选中要运行的代码格

我们用鼠标点一下第一个In[数字]:的代码格来选中它,也就是!pip install numpy这一行代码的格子,这段代码的意思是:感叹号!代表将pip install numpy运行在命令行里,它会下载并安装numpy这个库。
如图所示:
在这里插入图片描述

然后,我们可以用下面两种方式来运行这个格子中的代码,任选一种即可:

  1. 同时按下Shift + Enter这两个按键,可以运行我们选中的这个格子中的代码。
  2. 点击这个按钮在这里插入图片描述运行你选中的格子中的代码


重新运行文件中的所有代码

点击这个按钮在这里插入图片描述,再点击在这里插入图片描述即可运行所有代码。



1.安装Numpy

在命令行中执行如下命令即可安装Numpy
在本文附带的ipynb文件中,已经附带了这个命令,建议下载本文的代码,直接运行,就可以下载Numpy.。

步骤1.打开Anaconda Powershell Prompt

点击下面这个应用。
在这里插入图片描述

步骤2.执行安装命令

将下面的代码复制到Anaconda Powershell Prompt的黑窗口里执行。

pip install numpy

2.创建Numpy数组

通常可以通过如下方法进行创建Numpy数组

  • np.array(),可以传入一个列表作为参数,创建包含列表所有元素的数组
  • np.arange(),创建一个包含指定范围中的元素的数组

具体使用请看下方的代码

关于np.array():其实不止列表可传入np.array(),一些其他数据也可以,比如元祖,如果你后面看到形如np.xxx()这样的东西,规则很多时候也是一样的,有兴趣深入的话请查看官方文档。

import numpy as np  # 导入numpy,并给numpy起一个别名叫“np”,这样编码起来更方便。

# 使用np.array(),可以传入一个列表作为参数,创建数组
li = [1, 2, 3, 4, 5]
array_from_list = np.array(li)

# 使用np.arange创建数组
array_from_range = np.arange(1, 6, 1)  # 第一个参数为起点,第二个参数为终点,第三个参数为步长

print("使用列表创建的数组:", array_from_list)
print("使用np.arange创建的数组:", array_from_range)
print('它们的类型:', type(array_from_list))

运行结果

在这里插入图片描述

3.查看Numpy数组的属性

作为NumPy的ndarray对象有三个重要的属性:

  • ndarray.ndim - 数组的维度(轴)的个数。
  • (常用)ndarray.shape - 数组的维度,值是一个整数元祖,元祖的值代表其所对应的轴的长度。 比如对于二维数组,它用来表达这是个几行几列的矩阵,值为(x, y),其中x代表这个数组中有几行, y代表有几列。
  • ndarray.dtype - data type,描述数组中元素的类型

比如下面这个6行1列的数组:

import numpy as np  # 导入numpy

# 传入一个二维列表,创建一个二维Numpy数组,存入变量arr中。
arr = np.array([[1], [2], [3], [4], [5], [6]])
print('arr数组: ', arr)
print("arr数组的维度:", arr.ndim)
print("arr数组的形状:", arr.shape)
print("arr数组的数据类型:", arr.dtype)

运行结果

其中我们可以看到,“arr数组的形状:(6, 1)”,也就是arr.shape是(6, 1),代表形状为:6行1列
在这里插入图片描述

4.一维数组的索引和切片

在一维数组上,Numpy数组的索引和切片与Python本身的列表相差不大,按照列表的习惯进行操作即可。

关于索引:

  • 每个元素的 索引从0开始
  • 可以使用负索引,比如arr[-1],获取变量arr代表的数组中的倒数第一个元素

关于切片:

  • 我们可以通过arr[1:4]来获取变量arr代表的数组中的元素,它们分别是:索引为1,索引为2,索引为3,这三个的元素,切片[1:4]不包括索引4的元素
import numpy as np  # 导入numpy,它的别名是np

# 创建一个一维数组
arr = np.array([10, 20, 30, 40, 50])

# 索引:获取第三个元素(每个元素的索引从0开始)
third_element = arr[2]
print('第三个元素:', third_element)

# 切片:获取第二个到第四个元素
# 和Python本身的列表一样,切片[1:4]会得到索引为1, 2, 3的元素,不包括索引4的元素。
sub_array = arr[1:4]
print('第二到第四元素:', sub_array)

# 切片可以包含步长
every_other_element = arr[::2]
print('每隔一个元素:', every_other_element)

# 索引:可以使用负索引,倒序获取元素
last_element = arr[-1]
print('最后一个元素:', last_element)

运行结果

在这里插入图片描述

5.二维数组的索引和切片

在二维Numpy数组上,你也可以按照操作Python本身的列表的方式来操作Numpy数组。

但其实Numpy的开发者为Numpy实现了一种更加优雅而强大的索引和切片的写法。

Numpy的写法和Python列表的写法

我们假设变量matrix是一个Numpy的二维数组

  1. 获取第二行第三列的元素
    • 可写matrix[1, 2](Numpy特有),也可以写matrix[1][2](与操作列表相同)
  2. 获取第二列的元素
    • 可写matrix[:, 1](Numpy特有),很遗憾我们无法通过列表的切片方式快速获取第二列的元素,这也是为什么Numpy数组会更加方便。

相信你看出来了,Numpy特有的方式允许你仅在一对中括号“[]”中编写索引和切片,例如上面的[1, 2]代表的是第二行第三列的元素的索引,[:, 1]代表的是获取整个第二列的元素。

我们再抽象一点,就是[a, b]代表的是索引为a的行和索引为b的列上的元素[:, b]代表的是获取所有的行里面的索引为b的元素(即整个b列),以此类推。

具体请看下面的代码:

import numpy as np  # 导入numpy,它的别名是np

# 利用一个二维列表,创建一个二维数组(矩阵)
matrix = np.array([[1, 2, 3],
				   [4, 5, 6],
				   [7, 8, 9]])

# 索引:获取第二行第三列的元素,这里的写法与matrix[1][2]等价
element = matrix[1, 2]  	# Numpy特有的索引写法,不适用于列表
same_element = matrix[1][2] # 按照列表的习惯写索引
print('第二行第三列的元素:', element)
print('第二行第三列的元素:', same_element)

# 切片:获取第二列的所有元素
second_column = matrix[:, 1] # 按照Numpy的方法进行切片
print('整个第二列的元素:', second_column)

# 切片:获取第一和第二行的第二和第三列这一范围中的元素,即切出子矩阵
sub_matrix = matrix[0:2, 1:3] # 按照Numpy的方法进行切片
print('获取的子矩阵:\n', sub_matrix)

# 切片:使用负步长,获取第一行的逆序
reverse_first_row = matrix[0, ::-1]
print('第一行逆序:', reverse_first_row)


运行结果

抱歉在代码中没有展示出matrix的形态,这里补一下matrix这个矩阵的表现形式:
其实就是一个 3 * 3的正方形,在Numpy数组中表现为一个3行3列的矩阵。
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

在这里插入图片描述

总结

在本文中,我们学习了如何安装Numpy,如何创建Numpy数组,如何通过索引和切片来获取Numpy数组中的数据,这些都是相对来说比较常用的操作。后续的数据分析中,我们在使用其它工具库的时候,会经常进行这些基础而常用的操作。

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

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

相关文章

85.网游逆向分析与插件开发-物品使用-物品使用的逆向分析与C++代码的封装

内容参考于:易道云信息技术研究院VIP课 上一个内容:项目需求与需求拆解-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:453dd83d54140d2e1ee65c9…

量化交易学习3(量化择时策略)

1 什么是量化择时 量化择时策略,简单来说,就是采用数量化分析方法,利用单个或多个技术指标的组合,来对交易标的股票或股票指数进行低买高卖的操作,期望获得超越简单买入持有策略的收益风险表现。 量化择时策略的核心…

网络防御安全知识(第三版)

配置黑洞路由 --- 黑洞路由即空接口路由,在NAT地址池中的地址,建议配置达到这个地址指 向空接口的路由,不然,在特定环境下会出现环路。(主要针对地址池中的地址和出接口地址 不再同一个网段中的场景。) …

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

档案数字化转型面临问题

档案数字化转型面临以下问题: 1. 技术问题:档案数字化需要借助先进的技术手段和设备,包括扫描仪、存储设备和数据管理软件等。这些技术的成本高、操作复杂,需要专业的人员进行操作和维护。 2. 安全问题:档案数字化后的…

重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar)

重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 前言 sylar是…

[C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!

一,题目 遇到的一道算法题: 1,已知有一个数字矩阵(row行,col列),矩阵的每行 从左到右 递增,每列 从上到下 递增。 2,现输入一个数字 num ,判断数字矩阵中…

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 🌵文章目录🌵 🌳引言🌳🌳append()🌳🍀功能介绍🍀🍀语法🍀🍀示例🍀🍀注意事项&#x…

【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案

【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案 大家好 我是寸铁👊 总结了一篇Windows11下启动rpc服务报错panic解决方案的文章✨ 喜欢的小伙伴可以点点关注 💝 问题来源 今天在编写完proto文件后,使用goctl生成…

jenkins pipeline配置maven可选参数

1、在Manage Jenkins下的Global Tool Configuration下对应的maven项添加我们要用得到的不同版本的maven安装项 2、pipeline文件内容具体如下 我们maven是单一的,所以我们都是配置单选参数 pipeline {agent anyparameters {gitParameter(name: BRANCH_TAG, type: …

【算法Hot100系列】合并区间

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?

目录 1.既然redis那么快,为什么不用它做主数据库,只用它做缓存? 2.Redis 一般在什么场合下使用? 3.redis为什么这么快? 4.Redis为什么要引入了多线程? 1.既然redis那么快,为什么不用它做主数据…

电路笔记 :MOS场效应晶体管+红外遥控+AMS1117 电源模块

三极管(BJT,Bipolar Junction Transistor)和 MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)是两种不同类型的晶体管,它们在工作原理、性能特性和应用方面有一些重要的区别。 结构和工作原理…

基于.NET+FreeSql实现的仿掘金专栏前后端分离的CMS

前言 今天分享一款基于.NETFreeSql实现的仿掘金专栏前后端分离、支持Docker部署、集成了OAtuh2授权登录、QQ、Github、Gitee快速登录、简单实用的CMS:lin-cms-dotnetcore。 什么是 Lin CMS? 林间有风团官方团队Gitee地址:https://gitee.com/…

数据库管理-第139期 做大还是做小-Oracle名称哪些事(20240125)

数据库管理139期 2024-01-25 第139期 做大还是做小-Oracle名称哪些事(20240125)1 问题2 排查3 扩展总结 第139期 做大还是做小-Oracle名称哪些事(20240125) 作者:胖头鱼的鱼缸(尹海文) Oracle A…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一:低估产品开发 技术维度二:低估规模生产的复杂性 技术维度三:测试不足 技术维度四:产品太复杂 技术维度五:对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

指针的深入了解5

1.二维数组传参本质 在此之前我们学习了一维数组传参&#xff0c;传的是它的首元素地址。那么二维数组也是这样的吗&#xff1f; 我们来看一串代码&#xff1a; void print(int(*pt)[5]) {for (int i 0; i < 3; i){for (int j 0; j < 5; j){printf("%d ",…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入&#xff08;文本转向量&#xff09; 模型下载&#xff1a;bert预训练模型下载-CSDN博客 参考文章&#xff1a;使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

2024年了,是谁还在学C++11?(没错,是我)

今天要聊的这本书&#xff0c; 是真正畅行全球20年的C入门必读经典&#xff0c;各版本全球总销量超1300万册&#xff01; 它惠及了数百万高校师生&#xff0c;启蒙了5代国产程序员&#xff0c; 令全球数千万C开发者全部为之疯狂的大&#xff01;师&#xff01;名&#xff01…

实现Crm系统的灵活配置,满足不同行业客户需求

目录 一&#xff1a;数据模型配置 二&#xff1a;流程配置 三&#xff1a;扩展性配置 实现CRM系统的可配置性需要关注以下几个方面&#xff1a; 一&#xff1a;数据模型配置 为了满足企业的个性化需求&#xff0c;CRM系统需要提供灵活的数据模型配置。用户可以根据自己的业…