numpy的使用说明(一)

举报
yd_226342373 发表于 2021/05/20 01:42:09 2021/05/20
【摘要】 1、numpy的简介 numpy是"Numerical Python"的简称。numpy提供了一个高性能的多维数组对象ndarray(N Dimension Array),以及大量的库函数和操作,可以帮助程序员轻松地进行数值计算。原生python语言执行速度很慢,C执行500次,python差不多只能执行一次,但是python语法比其它编程语言要简单的多得多。因此我们...

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维数组对象,这个对象由两部分构成:1、元数据部分:存储的是当前这个ndarray对象的一些描述信息;2、真实数据部分:存储的是当前这个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()函数去创建数组;

操作如下

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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果如下:
在这里插入图片描述
结论如下:

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

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

# 语法如下:
range(start,end,step)
arange(start,end,step)
# 举例如下:
list1 = list(range(1,10,2))
display(list1)
array1 = np.arange(1,10,2)
display(array1)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果如下:
在这里插入图片描述
② 不同点:arange()函数的步长,可以是浮点数,但是range()函数的步长,不能是浮点数

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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果如下:
在这里插入图片描述
在这里插入图片描述

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,负整数)或者小数;

② 代码如下

array1 = np.zeros((3,4))
display(array1)

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果如下:
在这里插入图片描述
注意:我这里以创建二维数组为例,你传入一个数字,就可以创建一维数组;你传入三个数字,就可以创建三维数组,可以自己下去试一试。

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

① 常用函数如下

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

② 操作如下

## 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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

① 创建单位矩阵

## 1)np.eye(x)和np.identity(x)
array1 = np.eye(3)
display(array1)

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下:
在这里插入图片描述
② 创建对角矩阵

## 1)np.diag()
array1 = np.diag([10,20,30])
display(array1)

  
 
  • 1
  • 2
  • 3

结果如下:
在这里插入图片描述

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

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

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

② 用法如下

array1 = np.arange(1,15,3)
display(array1)
display(array1.dtype)

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果如下:
在这里插入图片描述
③ np.linspace()中两个常用的参数:endpoint和dtype

  • endpoint=True表示是包含终止值(默认),endpoint=False表示不包含终止值;
  • dtype=np.float64指定创建的数组的数据类型默认是float64,你也可以设置为dtype=np.np.int32;
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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果如下:
在这里插入图片描述

7)创建等比数列数组;

① 用一个例子进行说明

log_array = np.logspace(1, 7, num=4, endpoint=True, base=2)
display(log_array)

  
 
  • 1
  • 2

结果如下:
在这里插入图片描述
注意:上述代码表示在2的一次方到2的七次方之间,生成4个数,这四个数字还构成了一个等比数列。

② 再看另外一个案例

log_array1 = np.logspace(1, 5, 3)
display(log_array1)

  
 
  • 1
  • 2

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

8)通过自定义函数创建数组;
## 1)np.fromfunction()
## 定义一个函数
def f(x, y): return x * 2 + 1 + y

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果如下:
在这里插入图片描述

文章来源: blog.csdn.net,作者:数据分析与统计学之美,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41261833/article/details/103715051

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。