注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

Numpy入门(一)——Numpy Array Object  

2015-12-02 18:55:20|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这个翻译成数组对象总感觉不是很好,先将就着吧。Numpy中的多维数组对象叫做ndarrayn-dimension Array),该对象包含了实际数据和描述数据的元数据,数组对象中基本元素类型必须相同。以创建一个一维数组(或者说向量)的函数arange为例:

>>> a=arange(5)

>>> a

array([0, 1, 2, 3, 4])

数组下标以0开始,因此,上例中a[0]=0

可以看到,在输出的时候,前面总是带有一个array的,实际上是用array函数可以创建多维数组:

>>> m=array([[1,2,3],[3,2,1],[2,2,2]])

>>> m

array([[1, 2, 3],

       [3, 2, 1],

       [2, 2, 2]])

 

数组的数据类型(dtype)和形状(shape

使用ndarraydtype属性获取其中包含数据的类型,而使用shape属性得到一个描述数组各维长度的元组。

>>> a=arange(5)

>>> a.dtype

dtype('int32')

>>> a.shape

(5,)

对于前面创建的多维数组m,使用m.shape得到的元组是(3, 3)

关于Numpy中的数值类型,见下表:

类型

描述

bool

布尔值,True/False1Bit

inti

平台相关整型(一般是int32int64

int8

Byte-128~127

int16

整型(-2^15~2^15-1

int32

整型(-2^31~2^31-1

int64

整型(-2^63~2^63-1

uint16

整型(0~2^16-1

uint32

整型(0~2^32-1

uint64

整型(0~2^64-1

float16

半精度浮点数

float32

单精度浮点数

float64/float

双精度浮点数

complex64

实部和虚部均由float32构成的虚数

complex128/complex

实部和虚部均由float64构成的虚数

注:2^x表示2x次幂。

在创建数组的时候,可以指定其dtype,例如:

>>> a=arange(5,dtype=float32)

>>> a

array([ 0.,  1.,  2.,  3.,  4.], dtype=float32)

另外,对于浮点数类型,还可以使用finfo()函数查询其信息:

>>> finfo(float)

finfo(resolution=1e-15, min=-1.7976931348623157e+308, max=1.7976931348623157e+308, dtype=float64)

对于每种数据类型,还有相应的函数进行转换,例如:

>>> a=float32(123)

>>> type(a)

<class 'numpy.float32'>

>>> a.dtype

dtype('float32')

>>> a=123

>>> type(a)

<class 'int'>

>>> a.dtype

Traceback (most recent call last):

  File "<pyshell#54>", line 1, in <module>

    a.dtype

AttributeError: 'int' object has no attribute 'dtype'

类似的函数还有float64uint32等,上面的例子还表明,使用这些函数转换的数值,是属于numpy下的数据类型,而不是Python内置的类型。

最后,关于数据转换,需要知道的是,复数类型不能转换为float类型或者int类型:

>>> cc=1.1+2.2j

>>> int64(cc)

Traceback (most recent call last):

  File "<pyshell#66>", line 1, in <module>

    int64(cc)

TypeError: can't convert complex to int

数据类型对象

数据类型对象说明了单个数据的字节长度,使用itemsize属性可查询,例如:

>>> a=arange(5)

>>> a.dtype

dtype('int32')

>>> a.dtype.itemsize

4

>>> a.itemsize

4

由于是int32类型,每个int32类型使用4字节,因此itemsize的值为4。很显然,float64(123).itemsize得到的结果为8

类型字符码

除了前面介绍的可以在arange中使用类似dtype=float来指定数据类型外,还可以使用类型字符码指定其类型:

>>> x=arange(3,dtype='f')

>>> y=arange(3,dtype=float32)

>>> x

array([ 0.,  1.,  2.], dtype=float32)

>>> y

array([ 0.,  1.,  2.], dtype=float32)

下表列举了一些常见的类型字符码

类型

含义

代码

Integer

整型

i

Unsigned integer

无符号整型

u

Single precision float

单精度浮点型

f

Double precision float

双精度浮点型

d

Boolean

布尔型

b

Complex

复数

D

String

字符串

S

Unicode

Unicode

U

Void

Void

V

另外,还可以提供一个额外的数值,表明使用的字节数,例如上例中创建的float类型是单精度的,每个数据占四个字节,如果要使用占8个字节的float64类型,可以使用如下语句:

>>> z=arange(5,dtype='f8')

>>> z

array([ 0.,  1.,  2.,  3.,  4.])

>>> z.dtype

dtype('float64')

>>> p=arange(3,dtype='u8')

>>> p

array([0, 1, 2], dtype=uint64)

完整的数据类型字符码可以使用sctypeDict.keys()函数获取。

关于dtype的属性

除了前面介绍到的itemsize外,类dtype有一些很有用的属性。首先要介绍的是dtypechar属性,该属性给出了类型的类型字符码,例如:

>>> p=array([0, 1, 2, 3, 4], dtype=uint64)

>>> p.dtype.char

'Q'

str属性给出了字节序和类型字符码,例如:

>>> t=dtype(float64)

>>> t.char

'd'

>>> t.str

'<f8'

注意第一个字符<表明这个存储类型是Little-Endian顺序的,如果是Big-Endian顺序,则是>

  评论这张
 
阅读(357)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016