1.Numpy入门

1.Numpy入门


1.综述

生活中的多种数据,都可以看成是数字数组:

  • 图像(尤其是灰度图像)可以看成是二维数字数组,每个位置数字代表该像素的灰度值
    对于彩色图像的,可以分解红色灰度图像,绿色灰度图像,蓝色灰度图像三个灰色图像的叠加.
  • 声音片段可以看成时间和强度的一维数组
  • 文本也可以通过各种方式转换成数组表示

因此,有效地储存和操作数值数组是数据科学中绝对的基础过程

Python中,我们一般用两个专门的工具来高效的处理这些数值数组:Numpy和Pandas
这里将主要介绍Numpy(Numerical Python)

Numpy提供了高效存储和操作密级数据缓存的接口.
在某些方面,Numpy数组和Python内置的列表非常相似,但是随着数组在维度上的增加,Numpy的数字提供了更加高效的储存和数据操作.

Numpy几乎就是Python数据科学工具生态系统的核心.

本章就将讲解Numpy入门所需要的具备的一些知识
Numpy中和中操作将在下一章讲解:

  • 理解Python中的数据类型
  • Numpy中的数据类型

2.理解Python中的数据类型

我们如果想要实现高效的数据驱动科学和计算,需要理解数据是如何被储存和操作的,本节就将介绍在Python语言中
数据数组是如何被处理的,并对比Numpy所做的改进.

Python的易用性在很大程度上来源于他的变量是动态的,我们无需在给变量赋值之前声明变量的类型和给变量划分内存;但是对于C语言,我们每个变量的数据类型都必须被准确的声明.例如:

Python:
    x=4
    x='four'
>>>这样的操作是合法的,因为Python中的变量是动态的
C:
    int x;
    x="four"
>>>编译失败,这样的操作在C语言中是非法的

其实,Python这样的灵活性也指出了一个事实:

Python中的变量不仅是他们的值,还包括了关于值的类型的一些额外信息.

下面将来详细介绍.

Python中的变量不仅仅是它的值

标准的Python实现使用C语言编写的,这就意味着每一个Python对象都是一个聪明的伪C语言结构体
这个结构体不仅包含它的值,还包含其他信息.
例如,我们在Python中定义x=10000,x并不是一个原生的整型,他指向一个C语言的符合结构体

我们查看Python的源代码,能够看到整型(整型是一个对象)能够分成四部分:

struct_longobject{
    long ob_refcent;
    PyTypeObject*ob_type;
    size_t ob_size;
    long ob_digit[1];
}

即:

  • ob_fefcnt:是一个引用计数,帮助Python处理内存的分配和回收
  • ob_type:将变量的类型编码
  • ob_size:指定接下来的数据成员的大小
  • ob_digit:我们希望python变量表示的实际整型的值

因此,Python中的一个整型实际上包含两部分:

  • PyObject_HEAD
  • 实际储存的数据

这与C语言中很不同.
C语言整型本质上是对应某个内存位置的标签,里面储存的字节会编码成整型.
Python的整型实际上是一个指针,指向包含这个Python对象所有信息的某个内存位置.

因此Python的变量在重新赋值的时候,只需要改变PyObject_HEAD的信息,然后在改变指针即可.

正是由于Python变量包含描述部分(HEAD)和真实值,才实现了Python变量的灵活性.
但是当大量的相同数据集合在一起的时候,大量的PyObject_HEAD实际上造成了内存的开销.拉低了运行的速度(因为每个变量需要先解析PyObject_HEAD,在根据指针指向的地址取值)

Python中的列表不仅仅是项的值

根据前面的描述,我们很容易就能知道,为什么Python的列表具有异构性:
因为他的每一个项都包含各自的PyObject_HEAD,即每一项都是一个完整的Python对象.

因此如果一个列表中的数据都是同一个类型的话,Python中的原生列表就会浪费很多的内存和运行时间.

因此Numpy的数组就会要求所有的值都是同一个类型的,如果不是同一个类型的话,就会默认根据C语言的自动数据转换向上转换类型.

理解了Numpy列表和python列表的不同之处是很重要的.
因此也就不难理解为什么Numpy的数组需要声明数据类型


3.Numpy中的数据类型

Numpy中要求数据都是同一个类型的,所以在初始化数组的时候就经常需要声明变量的类型,
因此下面将介绍Numpy中的数据类型和声明

Numpy是基于C语言开发的,但是具有Python的API,因此Numpy的数据类型会和C语言比较类似.

Numpy的数据类型

数据类型描述
bool_布尔值(真/假,True/False),用一个字节储存
int_默认整形(类似于C语言中的long,但通常情况下是int32或int64)
intc与C语言的int相同(通常是int32或int64)
intp用作索引的整型(和C语言的ssize_t相同,通常情况下是int32或int64)
int8一字节
int16整型,两字节
int32整型,四字节
int64整型,八字节
uint8无符号整型
uint16无符号整型
uint32无符号整形
uint64无符号整形
float_float64的简化形式
float16半精度浮点数
float32单精度浮点数
float64双精度浮点数
complex_complex128的简化形式
complex64复数,有两个32位浮点数表示
coomplex128复数,由两个64位浮点数表示

其实Numpy还支持更多的数据类型,这里就不更多的列举了

Numpy的数据类型声明

Numpy中声明数据类型的方式有两种,一个是使用字符串参数来声明,还有一个是用Numpy对象.

np.zeros(10,dtype=‘int16’)

np.zeros(10,dtype=np.int16)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值