前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Hello NumPy》系列-数据类型与创建

《Hello NumPy》系列-数据类型与创建

原创
作者头像
小一不二三
修改2020-02-20 14:11:11
5100
修改2020-02-20 14:11:11
举报
NumPy 系列.png
NumPy 系列.png

2020,努力做一个无可替代的人!

写在前面的话

依照惯例,回顾一下上节内容:

上节介绍了最常用的部分高阶函数,也是我在实际项目中觉得效率比较高的函数之一了。

附上链接,大家自行复习:

今天开始新的系列,也是高阶部分的知识,难度会稍稍大一些,我打算多分几节。

哈哈,高阶部分我是没打算水文章,篇篇都是干货呦

建议不要错过任何一节内容,最好关注一下我噢

正文
背景

NumPy(Numerical Python 的简称)是高性能科学计算和数据分析的基础包,是 SciPy、Pandas 等数据科学的基础库,它所提供的数据结构比 Python 自身的更高级、更高效。

Numpy 提供了一种 ndarray 的多维数组结构,运算快速且节省空间。

思考一个问题,同样是多维数组,为什么不用 List 呢?

① 虽然 Python 中隐去了指针的概念,但学过 c 语言的同学应该了解,数组中保存的是对象的指针,list 也是,因为 list 本身也是一个数组。 这样的话,比如一个数组 'a', 'b', 'c' 需要有3个指针和3个字符对象,太浪费② list 中的元素在系统内存中是分散存储的,而 ndarray 是存储在一个连续均匀的内存块中。

上面的回答如果你不是很懂,那你记住一点就行了:ndarray 无论是存储还是计算,都大大优于 Python 原有的数据结构

像我们平时 excel 中打开的数据大多是二维数组,有行有列

ndarray 也可以同样理解,区别的是:ndarray 中的所有元素必须是相同类型的

安装 NumPy 包

和安装其他基础包一样,直接在 cmd 中安装即可。

pip2 表示 2.x 版本,pip3 表示 3.x 版本

  • 启动cmd
  • 输入 pip3 install numpy
导入 NumPy
代码语言:txt
复制
import numpy as np

这里需要提到一点,你可以不按照 NumPy 约定的写 np. 而直接在代码中使用 from numpy import *

但是非常不建议你这样做。

创建 ndarray
  • 使用 array 函数创建数组
  • 使用 arange 函数创建数组
  • 使用 zeros、ones 函数创建数组
  • 使用 empty 函数创建数组
  • 使用 eye 函数创建数组

数组的创建方法有很多种,以上列举的只是部分较常见的。

最简单的当然还是使用 array 函数

代码语言:txt
复制
# 通过 array 函数创建一维数组
data_list = [0, 1, 2, 3, 4, 5]
data_arr1 = np.array(data_list)

# 通过 array 函数创建二维数组
data_list = [[1.1, 3.1, 2.1], [3.2, 4.2, 5.2]]
data_arr2 = np.array(data_list)

# 通过 reshape 方法重新构造数组
data_arr3 = np.array(range(0, 6)).reshape(2, 3)

同样是创建数组,np.array 会尝试为新建的这个数组推断出一个较为合适的数据类型

数据类型保存在一个特殊的 dtype 对象中,比如上面我们创建的三个数组:

代码语言:txt
复制
# 输出数组的数据类型
data_arr1.dtype
data_arr2.dtype
data_arr3.dtype

# 输出
int32
float64
int32

可以看到,NumPy 自动的为我们选择了一个合适的数据类型。

当然,你也可以显示的说明数据类型:(更多数据类型继续往下看)

代码语言:txt
复制
# 显示的声明数据类型,float类型数据会自动转换为 int
data_list = [[1.1, 3.1, 2.1], [3.2, 4.2, 5.2]]
data_arr4 = np.array(data_list, dtype=np.int)

# 输出
[[1 3 2]
 [3 4 5]]

使用 arange 函数创建数组

arange 是 Python 内置函数 range 的数组版,但返回的是一个 ndarray 而不是列表

代码语言:txt
复制
# 使用 arange 函数创建数组
data_arr_5 = np.arange(0, 6)

# 输出
[0 1 2 3 4 5]

使用 zeros 函数创建数组

zeros 可以创建指定长度和形状的全0数组,类似的还有 zeros_like 函数

zeros_like:以另一个数组为参数,并根据其形状和 dtype 创建一个全0数组。

代码语言:txt
复制
# 通过 zeros 函数创建一维数组
data_arr6 = np.zeros(6)
# 输出
[0. 0. 0. 0. 0. 0.]

# 通过 zeros 函数创建二维数组
data_arr7 = np.zeros((2, 3))
# 输出
[[0. 0. 0.]
 [0. 0. 0.]]

# 通过 zeros_like 函数创建函数
data_arr8 = np.zeros_like(data_arr7)
# 输出
[[0. 0. 0.]
 [0. 0. 0.]]

使用 ones 函数创建数组

ones 函数类似 zeros 函数,不用的是 ones 创建一个全1数组,ones_like 同理

代码语言:txt
复制
# 通过 ones 函数创建函数
data_arr9 = np.ones(6)

# 输出
[1. 1. 1. 1. 1. 1.]

使用 empty 函数创建数组

empty 函数会产生一个全0数组。

需要注意的是,大多情况下,它返回的是一些未初始化的垃圾值,而并不是 0

代码语言:txt
复制
# 通过 empty 函数创建函数
data_arr10 = np.empty((2, 2))

# 输出
[[9.90263869e+067 8.01304531e+262]
 [2.60799828e-310 7.56601164e-307]]

使用 eye 函数创建数组

eye 函数会产生一个正方的 N*N 单位矩阵

单位矩阵:对角线为1, 其余为0

代码语言:txt
复制
# 通过 eye 函数创建函数
data_arr11 = np.eye(4)

# 输出
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

以上差不多是最常用的 NumPy 创建数组的几种方式。

我们在创建的时候可以显示的通过 dtype 声明数据类型,当然,NumPy 也可以自动识别并进行相应的转换。

提到数据类型,我们看一下 NumPy 的一些数据类型

类型

类型代码

说明

int8、unit8

i1、u1

有符号和无符号的8位整型

int16、unit16

i1、u1

有符号和无符号的16位整型

int32、unit32

i1、u1

有符号和无符号的32位整型

int64、unit64

i1、u1

有符号和无符号的64位整型

float16

f2

半精度浮点数

float32

f4 或 f

标准的单精度浮点数

float64

f8 或 d

标准的双精度浮点数

float128

f16 或 g

扩展精度浮点数

complex64、complex128、complex256

c8、c16、c32

分别用两个32、64、128位浮点数表示的复数

bool

存储 True 和 False 值的布尔类型

object

O

Python 对象类型

string_

S

固定长度的字符串类型

unicode_

U

固定长度的 unicode 类型

所以,在显示声明数据类型的时候,也可以通过类型代码进行声明:

代码语言:txt
复制
# 通过类型或类型代码显示声明数据类型
data_arr_float = np.array([0, 1, 2, 3, 4, 5], dtype=np.float64)
data_arr_float = np.array([0, 1, 2, 3, 4, 5], dtype='f8')

NumPy 中,可以通过创建的时候显示声明数据类型,还可以通过 astype 方法显示的转换其 dtype

例如,将整数类型转换成浮点类型

代码语言:txt
复制
# 创建 int 数组
data_arr_int = np.array([0, 1, 2, 3, 4, 5])
data_arr_int.dtype

# 输出
int32

# 通过 dtype 函数转换数据类型
data_arr_float = data_arr_int.astype(np.float64)
data_arr_float.dtype

# 输出
float64

如果是浮点数转换为整数,则小数部分将会被截断

另外, NumPy 会自动将 Python 类型映射到等价的 dtype 上。

例如你写了 float,Numpy 会自动识别为 np.float64。

总结一下:

NumPy 的第一篇文章,简单的介绍了如何创建数组、NumPy 数据类型以及不同类型之间的转换。

比较基础,有一个大致的认识就好了。

NumPy 作为最基础的基础,当然我是建议大家都会的,通过创建数组的方法你就能看到,NumPy 和线性代数有很大联系,在以后的算法推导方面,有很大用处。

但是也不是说必须要都懂,知道有这个东西就行,遇到问题了再回过头翻文章查阅一下。

写在后面的话

基础的东西是有点枯燥乏味的,我尽可能的按照正常的思维逻辑去展开描述。

比如 NumPy 开头,我没有一开始就上干货内容,

正常人的思维逻辑应该是:为什么要学这个?有什么用?怎么学?

所以文章一开始,我是按照上面的三个问题为主线的,这也是我在学习编程的时候自己的一点心得,希望你们喜欢。

碎碎念一下

最全的干货已经开始了,大家不要掉队啊。 让我看看有多少人还看到了这儿?点个赞让我看到你

原创不易,欢迎点赞噢

文章首发:公众号【知秋小梦】 文章同步:掘金,简书

原文链接:《Hello NumPy》系列-数据类型与创建

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面的话
  • 正文
    • 背景
      • 安装 NumPy 包
        • 导入 NumPy
          • 创建 ndarray
          • 总结一下:
          • 写在后面的话
            • 碎碎念一下
              • 原创不易,欢迎点赞噢
              相关产品与服务
              命令行工具
              腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档