Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手撕numpy(一):简单说明和创建数组的不同方式​​​​​

手撕numpy(一):简单说明和创建数组的不同方式​​​​​

作者头像
朱小五
发布于 2020-03-18 00:25:13
发布于 2020-03-18 00:25:13
81000
代码可运行
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据
运行总次数:0
代码可运行

最近给大家更新一波python的基础知识,这次带来的是手撕numpy系列。

1、numpy的简介

numpy是"Numerical Python"的简称。

numpy提供了一个高性能的多维数组对象ndarray(N Dimension Array),以及大量的库函数和操作,可以帮助程序员轻松地进行数值计算。

原生python语言执行速度很慢,C执行500次,python差不多只能执行一次,但是python语法比其它编程语言要简单的多得多。因此我们既想要某一个编程语言执行速快,同时还编程简单。最终python通过集成C和C++,最终解决这个问题,也就是说:底层运行的是C和C++的代码,但是上层使用的是python语言去写的。这就是我们为什么都喜欢使用"numpy库"的原因。

numpy作为很多的用来做数据挖掘数据分析人工智能相关的技术组件的底层实现。像SciPy、Matplotlib、Scikit-learn在一定程度上,都需要依赖numpy。

2、学习numpy的套路

学习怎么使用numpy组织数据(怎么创建出,你想要的不同维度,不同形状的数组):numpy提供了一个高性能的多维数组对象:ndarray。

学习numpy提供的函数处理这个组好的数据:numpy提供了很多很多的库函数,帮助我们处理这些数据。

3、关于numpy中ndarray数据对象的结构说明

numpy中最重要的数据结构是称为ndarray的n维数组对象,这个对象由两部分构成:

  • 元数据部分:存储的是当前这个ndarray对象的一些描述信息;
  • 真实数据部分:存储的是当前这个ndarray对象中的真实数据。

1)什么是ndarray数组对象的描述信息呢?

注意:上述图中的shape、size、dtype、ndim等都是x这个ndarray对象的描述信息,这些信息都存储在元数据区域。而1,2,3,4,5,6就是这个对象中的真实数据。

4、ndarray数组和list列表的简单对比

① ndarray数组和list中的数据类型

list列表中可以存储不同的数据类型,例如:x = [1,2.3,True,“中国”]。ndarray数组中存储的所有的元素的类型,都必须一致。

② 使用numpy创建数组和使用原生list的效率对比

③ 使用ndarray创建数组的好处

既然ndarray中,每个元素的类型既然是一致的,那么整个ndaray就只需要一个元数据信息就可以了,而不是像list一样,每个对象都需要存储一个元数据信息。

ndarray好处在于:1、由于元数据只需要存储一份,所以可以更节省空间。2、由于每个元素的类型一致,就证明每个元素占用内存的大小是一致的,那么这样的数据的存储可以更紧凑,操作更高效。

5、什么是维度?

① 用一个例子进行说明

② 一张图形象说明一维数组、二维数组、三维数组的ndarray写法

③ 针对上述知识点进行举例说明

6、创建数组的几种不同方式

1)利用array()函数去创建数组;

操作如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

array1 = [1,2,3]
m = np.array(array1)
display(m)

array2 = [[1,2,3],[4,5,6]]
n = np.array(array2)
display(n)

结果如下:

结论如下:

  • np.array(参数)函数,参数给了什么样式的数据,就构建什么样式的ndarray数组;你给我一个一维列表,我就构建一个一维数组;你给我一个二维列表,我就构建一个二维数组;
  • 什么是二维列表?每个元素都是一个一维列表的列表,就是一个二维列表;
  • 如果我构建了一个二维列表,那么这个二维列表中的每个元素就都是一个一维列表;
  • 在numpy中,一维数组又叫做"向量";二维数组又叫做"矩阵";

2)利用arange()函数去创建数组:对比列表的range()函数学习;

① 相同点:用法都是相同的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 语法如下:
range(start,end,step)
arange(start,end,step)
# 举例如下:
list1 = list(range(1,10,2))
display(list1)
array1 = np.arange(1,10,2)
display(array1)

结果如下:

② 不同点:arange()函数的步长,可以是浮点数,但是range()函数的步长,不能是浮点数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1 = list(range(1,10,2))
display(list1)
list2 = list(range(1,10,0.5))
display(list2)
list3 = list(range(10,1,-2))
display(list3)

array1 = np.arange(1,10,2)
display(array1)
array2 = np.arange(1,10,0.5)
display(array2)
array3 = np.arange(10,1,-2)
display(array4)

结果如下:

3)利用指定值生成指定形状的数组;

① 常用函数如下

  • np.zeros((x,y)):生成一个x行y列的,元素都是0的二维数组;
  • np.ones((x,y)):生成一个x行y列的,元素都是1的二维数组;
  • np.full((x,y),value):生成一个x行y列的,元素都是value的二维数组,其中这个value值可以是整数(正整数,0,负整数)或者小数;

② 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array1 = np.zeros((3,4))
display(array1)

array2 = np.ones((3,4))
display(array2)

array1 = np.full((3,4),1.2)
display(array3)

结果如下:

注意:我这里以创建二维数组为例,你传入一个数字,就可以创建一维数组;你传入三个数字,就可以创建三维数组,可以自己下去试一试。

4)按照已有的ndarray数组的形状,创建形状相同但指定元素的ndarray数组;

① 常用函数如下

  • np.zeros_like()
  • np.ones_like()
  • np.full_like()

② 操作如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 1)先创建一个一维数组和一个二维数组;
n1 = np.array([1,2,3]);
n2 = np.array([[1,2,3],[4,5,6]])

## 2)使用np.zeros_like()
array1 = np.zeros_like(n1)
array2 = np.zeros_like(n2)
display(array1)
display(array2)

## 3)np.ones_like()
array3 = np.ones_like(n1)
array4 = np.ones_like(n2)
display(array3)
display(array4)

## 4)np.full_like()
array5 = np.full_like(n1)
array6 = np.full_like(n2)
display(array5)
display(array6)

结果如下:

5)创建单位矩阵和对角矩阵;

① 创建单位矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 1)np.eye(x)和np.identity(x)
array1 = np.eye(3)
display(array1)

array2 = np.identity(4)
display(array2)

结果如下:

② 创建对角矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 1)np.diag()
array1 = np.diag([10,20,30])
display(array1)

结果如下:

6)创建等差数列数组:对比arange()函数和linspace()函数学习;

① np.arange()和np.linspace()创建等差数列的区别

  • np.arange(start,stop,step)第三个参数指的是元素步长;
  • np.linspace(start,stop,num)第三个参数指的是元素个数;
  • np.arange()取不到最大的那个值stop,np.linspace()默认可以取到最大值stop;

② 用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array1 = np.arange(1,15,3)
display(array1)
display(array1.dtype)

array2 = np.linspace(1,15,3)
display(array2)
display(array2.dtype)

结果如下:

③ np.linspace()中两个常用的参数:endpoint和dtype

  • endpoint=True表示是包含终止值(默认),endpoint=False表示不包含终止值;
  • dtype=np.float64指定创建的数组的数据类型默认是float64,你也可以设置为dtype=np.np.int32;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array3 = np.linspace(1,20,num=5,endpoint=False,dtype=np.float64)
display(array3)

array4 = np.linspace(1,20,num=5,endpoint=False,dtype=np.int32)
display(array4)

array5 = np.linspace(1,20,num=5,endpoint=True,dtype=np.float64)
display(array5)

array6 = np.linspace(1,20,num=5,endpoint=True,dtype=np.int32)
display(array6)

结果如下:

7)创建等比数列数组;

① 用一个例子进行说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log_array = np.logspace(1, 7, num=4, endpoint=True, base=2)
display(log_array)

结果如下:

注意:上述代码表示在2的一次方到2的七次方之间,生成4个数,这四个数字还构成了一个等比数列。

② 再看另外一个案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log_array1 = np.logspace(1, 5, 3)
display(log_array1)

结果如下:

注意:上述代码表示会默认base=10,也就是说,在10的一次方到10的五次方之间,生成3个数,这3个数还构成一个等比数列。

8)通过自定义函数创建数组;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 1)np.fromfunction()
## 定义一个函数
def f(x, y):
    return x * 2 + 1 + y

## 从一个函数生成一个二维数组;
b = np.fromfunction(f, (3,3), dtype=np.int32)
display(b)

## 在这个函数,f函数要接收的参数,就是当前元素的坐标;
## 00列,传入的就是x=0,y=0;
## 01列,传入的就是x=0,y=1;
## 32列,传入的就是x=3,y=2;

结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端|npm全局创建wps加载项
基于vscode的方式创建wps加载项在获取类型之后,无法自动生成wps加载项,在网上查询相关问题内容也无果。不过Wps官方文档又更新了通过npm全局的方式创建wps加载项,下面就来具体介绍一下。
算法与编程之美
2020/03/31
2K0
Top 10 JavaScript编辑器,你在用哪个?
对于JavaScript程序员来说,目前有很多很棒的工具可供选择。本文将会讨论10个优秀的支持JavaScript,HTML5和CSS开发,并且可以使用Markdown进行文档编写的文本编辑器。为什么使用编辑器而不是IDE进行JavaScript编程?原因就是速度快。
葡萄城控件
2022/05/09
3.8K0
Top 10 JavaScript编辑器,你在用哪个?
Vscode笔记-24款插件
首先当然是一些语言支持的插件,这个大家根据自己的需要安装就好了。平时编写什么语言,就安装什么语言的插件。
小城故事
2023/03/10
11.7K0
Vscode笔记-24款插件
前端开发工具:助力创造精彩Web体验
当涉及到前端开发工具时,有许多强大且多样化的工具可以帮助开发人员创建令人印象深刻的Web应用程序和网站。本文将探讨一些前端开发工具,从代码编辑器和集成开发环境(IDE)到调试工具和构建工具,帮助前端开发人员提高生产力并创建高质量的用户界面。
海拥
2023/09/15
3310
前端开发工具:助力创造精彩Web体验
前端开发工具的简单介绍
正所谓“工欲善其事,必先利其器”,对Web开发人员来说,好工具的使用总会给人带来事半功倍的效果。
YangAir
2020/02/12
1.8K0
想入门web前端开发,并且学好,你必须知道的十大开发工具
在网站制作和开发的过程中,其实有很多的辅助咱们开发的工具,使用这些工具会让咱们的开发更为方便,提高工作效率,从事开发第六个年头了,接下来为大家分享一些常用工具,专家建议:收藏一波!
用户5827212
2020/01/20
7960
Day01_webpack
快速、可靠、安全的依赖管理工具。和 npm 类似, 都是包管理工具, 可以用于下载包, 就是比npm快
用户10169043
2022/11/16
1.7K0
「 工具篇 」VS Code
之前部门想要统一代码编辑器, 最后决定统一用 VS Code,需要一篇比较系统的介绍文章。
皮小蛋
2021/05/10
3.2K0
「 工具篇 」VS Code
【坐等WPS兼容时刻到来】开源分享完整ExcelDNA框架的Excel插件项目
为了迎接全民ExcelDNA开发的浪潮的到来,在启动ExcelDNA兼容个人版WPS的众筹项目后,再接再厉,给大家做了个完整的Demo。
Excel催化剂
2022/03/30
2.6K0
【坐等WPS兼容时刻到来】开源分享完整ExcelDNA框架的Excel插件项目
第三章 构建Markdown应用程序 | Electron in Action(中译)
在本章中,我们将更深入地探讨,并为与用户操作系统建立更紧密联系的应用程序打下基础。在接下来的几章中,我们将实现触发操作系统用户界面,对文件系统进行读写和访问剪贴板的功能。
sanshengshui
2019/07/03
2.3K0
第三章 构建Markdown应用程序 | Electron in Action(中译)
10分钟实现Typora(markdown)编辑器
在本章中,我们将更深入地探讨,并为与用户操作系统建立更紧密联系的应用程序打下基础。在接下来的几章中,我们将实现触发操作系统用户界面,对文件系统进行读写和访问剪贴板的功能。
sanshengshui
2019/07/08
3.1K0
solidity语言介绍以及开发环境准备
Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。
若与
2018/05/27
2.1K0
solidity语言介绍以及开发环境准备
文科生0基础使用Codebuddy,生成“哆啦A梦”机器人产品介绍网站
“我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”;
Vivitalk
2025/05/11
2231
文科生0基础使用Codebuddy,生成“哆啦A梦”机器人产品介绍网站
Mac App推荐
写在前面:App既可以在App Store下载,也可以去专门的网站下载.后者会是主要的下载方式.
但老师
2020/09/12
1.1K0
Mac App推荐
前端开发技术(vscode怎么下载)
   在前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code。
全栈程序员站长
2022/07/25
2.7K0
前端开发技术(vscode怎么下载)
【玩转 Cloud Studio】,体验你没见过的云端开发!
Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能使用。使用起来更便捷!
就叫7620521吧
2022/08/15
2.5K5
使用JS开发桌面应用
Javascript在web开发中已经稳稳的占据了重要位置,现在已经开始渗透到桌面开发了 Electron 便是用来创建桌面应用的框架 使用 JavaScript + HTML + CSS 就可以开发跨平台的桌面应用 支持 Windows Linux Mac,在这3个系统中,Electron可以轻松的编译和运行 Electron 是开源的,由 GitHub 亲自维护,还有活跃的贡献者社区 Electron 源于 GitHub 开发的一款文本编辑器 Atom,刚开始,Electron 是为 Atom 而创建,
dys
2018/04/03
3K0
使用JS开发桌面应用
大前端时代你的VSCode插件
2018已成历史,大前端的时代不知不觉中已然来到了我们身边,完善你的军刀库为你的开发进行时提升效率,是我们必然要进行的事情。这一篇文章收集了一些我经常使用的 vscode 插件,它们解决了很多我遇到的问题,为我提升效率带来了很大的改进,因此分享给大家。
icepy
2019/06/24
1.5K0
大前端时代你的VSCode插件
Azure机器学习 - 使用与Azure集成的Visual Studio Code实战教程
VS Code 网页版为你提供了一个功能齐全的开发环境,可用于构建你的机器学习项目,所有操作都可以从浏览器中完成,并且不需要安装任何软件或依赖项。通过连接你的 Azure 机器学习计算实例,你可以获得丰富的集成开发体验和代码,并通过 Azure 机器学习的强大功能得到增强。
TechLead
2023/10/30
4420
Azure机器学习 - 使用与Azure集成的Visual Studio Code实战教程
第一章 Electron介绍 | Electron in Action(中译)
网页的一大特色就是无处不在, 这是一个令人惊叹的平台,用它所创建的协作平台,可以被多种类型的设备所访问,无论设备运行在何种操作系统上。换句话说,网页只能运行在浏览器中,无法直接运行在操作系统中,因此网页应用程序也就无法访问文件操作系统。它们也无法执行非JavaScript编写的代码,他们无法调用桌面应用程序可以使用的众多操作系统接口。还有,当大多数网页应用程序没有可靠的互联网连接时,也就无法使用了。
sanshengshui
2019/06/26
3.8K0
第一章 Electron介绍 | Electron in Action(中译)
相关推荐
前端|npm全局创建wps加载项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验